2017-07-20 76 views
0

虽然读出存储在与Hadoop的任一阶或pyspark的误差的镶木文件时发生:如何在使用pyspark阅读镶木地板文件时指定模式?

#scala  
var dff = spark.read.parquet("/super/important/df") 
    org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.; 
     at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189) 
     at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$8.apply(DataSource.scala:189) 
     at scala.Option.getOrElse(Option.scala:121) 
     at org.apache.spark.sql.execution.datasources.DataSource.org$apache$spark$sql$execution$datasources$DataSource$$getOrInferFileFormatSchema(DataSource.scala:188) 
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:387) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152) 
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:441) 
    at org.apache.spark.sql.DataFrameReader.parquet(DataFrameReader.scala:425) 
    ... 52 elided 

sql_context.read.parquet(output_file) 

导致同样的错误。

错误消息非常明确:必须完成的操作:无法推断Parquet的模式。它必须手动指定。。 但我可以在哪里指定它?

Spark 2.1.1,Hadoop 2.5,数据框是在pyspark的帮助下创建的。文件被分成10个peaces。

+0

你可以试试这个var dff = spark.read.parquet(“/ super/important/df”)。toDF(“ColumnName1,”ColumnName2“) – Bhavesh

回答

1

这个错误通常,当您尝试读取一个空目录拼花发生。 例如,如果您创建一个空的DataFrame,则将它写入实木复合地板然后读取,则会显示此错误。 在写入之前,您可以检查DataFrame是否为空,并使用rdd.isEmpty()

0

我做了一个快速的实现对同一

enter image description here

希望这有助于!! ...

相关问题