首页 > 解决方案 > Spark 无法合并镶木地板文件 (INTEGER -> DECIMAL)

问题描述

我有 2 个镶木地板文件。

第一个包含以下列:DECIMAL: decimal(38,18) (nullable = true)

第二个具有相同的列,但类型不同:DECIMAL: integer (nullable = true)

我想合并它们,但我不能简单地单独阅读它们并将强制转换到特定列中,因为这是接收许多不同拼花模式的应用程序的一部分。我需要能够涵盖所有场景的东西。

我都这样读:

df = spark.read.format("parquet").load(['path_to_file_one', 'path_to_file_2'])

当我尝试显示数据时失败并出现以下错误

Parquet 列无法转换。列:[DECIMAL],预期:DecimalType(38,18),找到:INT32

我正在使用具有以下配置的 Azure Databricks:

我在这里上传了镶木地板文件:https ://easyupload.io/m/su37e8

无论如何我可以强制 spark 将空列自动转换为另一个数据框中同一列的类型吗?

这应该很容易,所有列都可以为空......

标签: apache-sparkpysparkazure-databricks

解决方案


如果您为外部架构提供列数据类型定义为小数并且该列包含小数(38,18),则这是预期的。

在此处输入图像描述

我们发现这是火花的限制。数据类型为 decimal(38,18) 的列。

尝试df.show()显示结果。

在此处输入图像描述


推荐阅读