在 Spark 2.1.0 中启用 _metadata 文件

Enable _metadata files in Spark 2.1.0

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

我发现自从 Spark 2.0 以来,写入 parquet 文件时默认禁用写入 _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)

sc.emptyRDD() 的行为有问题。您可以找到有关 https://github.com/apache/spark/pull/12855 为什么会出现此行为的更多信息。

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