似乎在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)
答案 0 :(得分:0)
这是sc.emptyRDD()
行为的问题。您可以在https://github.com/apache/spark/pull/12855找到有关此行为的确切原因的更多信息。
目前的解决方案是执行以下操作:df = spark_session.createDataFrame(sc.emptyRDD(), schema).repartition(1)
并仍然提出问题中提到的配置设置。