Azure Data Factory Parquet接收器十进制数据偏移问题求助
解决方案:ADF Parquet接收器Decimal数据偏移问题
针对你遇到的ADF通过Parquet接收器写入ADLS Gen2时,Decimal(35,15)类型数据因小数前导0丢失导致偏移的问题,可尝试以下几种解决方法:
1. 强制指定Parquet接收器的Decimal类型映射
在ADF管道的Parquet接收器配置中,不要依赖自动类型映射,手动指定目标字段的精度和小数位:
- 进入接收器的映射标签,点击「导入架构」
- 找到问题Decimal字段,将其类型手动设置为
Decimal(35,15),确保精度和小数位与数据源完全匹配 - 保存配置后重新运行管道,让Parquet writer严格按照指定类型写入数据
2. Databricks读取时显式定义Schema
如果ADF端调整后仍存在读取偏移,在Databricks读取Parquet文件时,强制指定字段的Decimal类型,避免Spark自动推断出错:
from pyspark.sql.types import StructType, StructField, DecimalType # 自定义Schema,替换为你的实际字段结构 custom_schema = StructType([ StructField("target_decimal_col", DecimalType(35, 15), nullable=True), # 其他字段请按需添加 ]) # 用自定义Schema读取Parquet文件 df = spark.read.schema(custom_schema).parquet("abfss://<container_name>@<storage_account>.dfs.core.windows.net/<file_path>")
3. 临时绕过方案:字符串中转
若上述方法无效,可在ADF管道中添加数据转换活动,先将Decimal字段转为字符串(保留完整格式),再转回Decimal(35,15)后写入Parquet。这种方式能确保小数前导0不被丢失,但会增加处理开销,适合小数据量场景。
4. 检查版本兼容性
- 确认ADF使用的Parquet writer版本与Databricks的Parquet reader版本兼容,部分旧版本对高精度Decimal的处理存在bug
- 尝试升级Databricks Runtime到11.3 LTS及以上的稳定版本,新版本对Decimal类型的解析支持更完善
内容的提问来源于stack exchange,提问作者Brandon Chan
相关产品推荐
相关产品推荐

