使用 scala 或 pyspark 读取存储在 hadoop 中的 Parquet 文件时,发生错误:

#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 个和平区。

最佳答案

当您尝试将空目录作为 Parquet 读取时,通常会发生此错误。
例如,如果您创建一个空的 DataFrame,您将其写入 Parquet ,然后读取它,则会出现此错误。
您可以在写入之前使用 rdd.isEmpty() 检查 DataFrame 是否为空。

关于hadoop - 如何在使用 pyspark 读取 Parquet 文件时指定架构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45203254/

10-16 01:54