代码之家  ›  专栏  ›  技术社区  ›  dhalfageme

Spark:在将拼花文件“放入”HDFS之前,无法从HDFS加载拼花文件

  •  0
  • dhalfageme  · 技术社区  · 7 年前

    我有一个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中读取它们

    2 回复  |  直到 7 年前
        1
  •  0
  •   fej    7 年前

    您是否检查了webhdfs服务是否将文件放在同一路径下(/tmp/test.parquet)?换句话说,你能用hdfs客户端(hdfs get)下载文件(通过webhdfs上传的)吗?

    联邦政府

        2
  •  0
  •   dhalfageme    7 年前

    我终于找出了错误的原因。以“\u”字符开头的上载文件的名称。这就是spark无法加载拼花文件的原因。