我有一个c#应用程序,可以创建拼花文件并将其上载到远程HDFS。如果我使用scp将文件复制到安装了HDFS客户端的目标计算机上,然后将文件“HDFS-put”到HDFS中,spark可以正确读取该文件。
如果我使用curl针对webhdf服务将文件直接从客户端应用程序上载到HDFS,那么在尝试读取拼花文件时,Spark会出现以下错误:
回溯(最近一次呼叫时间):
文件“”,第1行,在
文件“/usr/hdp/current/spark2 client/python/pyspark/sql/readwriter.py”,第303行,镶木地板
返回self._df(self._jreader.parquet(_to_seq(self._spark._sc,paths)))
文件“/usr/hdp/current/spark2 client/python/lib/py4j-0.10.7-src.zip/py4j/java廑gateway.py”,第1257行,in
文件“/usr/hdp/current/spark2 client/python/pyspark/sql/utils.py”,第69行,deco
引发分析异常(s.split(':',1)[1],stackTrace)
pyspark.sql.utils.AnalysisException:无法推断拼花地板的架构。必须手动指定
如果我将两个文件(scp上载了一个文件和通过curl上载的文件)提取到本地文件系统并在文件之间进行二进制差异,则差异不会显示任何差异。如果我再次将文件放入HDFS(使用curl和webhdfs上传的文件),那么Spark可以很好地读取拼花文件。
就像“hdfs-put”让spark很好地读取拼花文件。
更新:如果我在本地找到一个有几个parquet的目录,然后把它再次放入HDFS,它就不起作用了,我必须把parquet文件一个接一个地放到spark中读取它们