Apache Spark作業失敗,Parquet列無法轉換錯誤

無法轉換Parquet列,在以Parquet格式讀取十進製數據並寫入Delta表時出現錯誤。

寫的shanmugavel.chandrakasu

最後發布時間:2022年5月20日

問題

您正在以Parquet格式讀取數據,並將數據寫入Delta表拚花柱不能轉換錯誤消息。

集群運行的是Databricks Runtime 7.3 LTS及以上版本。

寫行時任務失敗。原因如下:com.databricks.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.execution.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讀取器,可能會對性能造成輕微影響。隻有在源數據中有十進製類型的列時,才應該禁用它。