似乎在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 回答
这是
sc.emptyRDD()
的行为问题 . 您可以在https://github.com/apache/spark/pull/12855上找到有关此行为的详细信息 .当前的解决方案是执行以下操作:
df = spark_session.createDataFrame(sc.emptyRDD(), schema).repartition(1)
并且仍然具有问题中提到的配置设置 .