Apache Spark作业失败,Parquet列无法转换错误

无法转换Parquet列,当以Parquet格式读取十进制数据并写入Delta表时出现错误。

写的shanmugavel.chandrakasu

最后发布日期:2022年5月20日

问题

您正在以Parquet格式读取数据并写入Delta表拼花柱不能转换错误消息。

集群运行的是Databricks Runtime 7.3 LTS或以上版本。

写行时任务失败。由:com. databicks .sql.io. filereadexception: Error while reading file s3://bucket-name/landing/edw/xxx/part-xxxx-tid-c00.snappy.parquet引起。拼花柱不能转换。Column: [Col1], Expected: DecimalType(10,0), Found: FIXED_LEN_BYTE_ARRAY原因:org.apache.spark.sql. execute .datasources. schemacolumnconvertnotsupportedexception

导致

矢量化Parquet阅读器正在将十进制类型的列解码为二进制格式。

在Databricks Runtime 7.3及以上版本中,矢量化Parquet阅读器默认启用,用于读取Parquet文件中的数据集。read模式使用原子数据类型:二进制、布尔值、日期、字符串和时间戳。

删除

信息

此错误仅在源数据中有十进制类型列时发生。

解决方案

如果源数据中有十进制类型的列,则应该禁用向量化Parquet读取器。

spark.sql.parquet.enableVectorizedReader在集群的Spark配置中禁用向量化Parquet读取器。

你也可以通过运行以下命令在笔记本级别禁用矢量化Parquet阅读器:

% scala spark.conf.set(“spark.sql.parquet.enableVectorizedReader”,“假”)
删除

信息

矢量化的Parquet读取器使用下推过滤器支持本机记录级过滤,提高内存局部性和缓存利用率。如果禁用向量化Parquet读取器,可能会有轻微的性能影响。只有在源数据中有十进制类型的列时,才应该禁用它。