在 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)
并且仍然具有问题中提到的配置设置。
似乎在 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)
并且仍然具有问题中提到的配置设置。