在序列化数据中找不到必填字段“uncompressed_page_size”!镶木地板
Posted
技术标签:
【中文标题】在序列化数据中找不到必填字段“uncompressed_page_size”!镶木地板【英文标题】:Required field 'uncompressed_page_size' was not found in serialized data! Parquet 【发布时间】:2017-11-09 20:57:19 【问题描述】:尝试使用 pyspark 从本地目录保存镶木地板文件时出现以下错误。 我试过 spark 1.6 和 2.2 都给出同样的错误
它可以正确显示架构,但在写入文件时会出错。
base_path = "file:/Users/xyz/Documents/Temp/parquet"
reg_path = "file:/Users/xyz/Documents/Temp/parquet/ds_id=48"
df = sqlContext.read.option( "basePath",base_path).parquet(reg_path)
out_path = "file:/Users/xyz/Documents/Temp/parquet/out"
df2 = df.coalesce(5)
df2.printSchema()
df2.write.mode('append').parquet(out_path)
org.apache.spark.SparkException: Task failed while writing rows
Caused by: java.io.IOException: can not read class org.apache.parquet.format.PageHeader: Required field 'uncompressed_page_size' was not found in serialized data! Struct: PageHeader(type:null, uncompressed_page_size:0, compressed_page_size:0)
【问题讨论】:
什么 hadoop 发行版? 我在本地机器上运行它。所以我只是安装了spark我没有安装Hadoop。 本地有什么spark版本? 我用 spark 1.6 和 2.2.0 都试过了 您安装了哪个 Java 版本? 【参考方案1】:在我自己的例子中,我正在为 Apache Tika 编写一个自定义 Parquet Parser,我遇到了这个错误。事实证明,如果文件正被另一个进程使用,ParquetReader 将无法访问uncompressed_page_size
。因此,导致错误。
验证其他进程是否没有保留该文件。
【讨论】:
【参考方案2】:由 spark config 临时解决:
"spark.sql.hive.convertMetastoreParquet": "false"
虽然会产生额外费用,但现在是一种绕开的方法。
【讨论】:
以上是关于在序列化数据中找不到必填字段“uncompressed_page_size”!镶木地板的主要内容,如果未能解决你的问题,请参考以下文章
DataContractSerializer:在流中找不到引用 id 'xyz' 的反序列化对象。如何恢复数据?
Django-Rest-Framework POST 对象字段必填