在Spark 2.1.0中启用_metadata文件

时间:2017-01-25 14:30:15

标签: apache-spark pyspark parquet

似乎在Spark 2.1.0中保存了空的Parquet文件,因为无法再次读取它们(由于模式推断错误)

我发现自编写镶木地板文件时,默认情况下禁用Spark 2.0编写_metadata文件。但是我找不到配置设置来重新打开它。

我尝试了以下内容:

spark_session = SparkSession.builder \
                        .master(url) \
                        .appName(name) \
                        .config('spark.hadoop.parquet.enable.summary-metadata', 'true') \
                        .getOrCreate()

和一些不同的组合,例如没有spark.hadoop

我试图在PySpark中运行的代码:

spark_session = session.get_session()
sc = spark_session.sparkContext

df = spark_session.createDataFrame(sc.emptyRDD(), schema)

df.write.mode('overwrite').parquet(path, compression='none')

# this works
df = spark_session.read.schema(schema).parquet(path)

# This throws an error
df = spark_session.read.parquet(path)

1 个答案:

答案 0 :(得分:0)

这是sc.emptyRDD()行为的问题。您可以在https://github.com/apache/spark/pull/12855找到有关此行为的确切原因的更多信息。

目前的解决方案是执行以下操作:df = spark_session.createDataFrame(sc.emptyRDD(), schema).repartition(1)并仍然提出问题中提到的配置设置。