从 Spark 写入时避免丢失分区数据的数据类型

2024-03-24

我有一个如下所示的数据框。

itemName, itemCategory
Name1, C0
Name2, C1
Name3, C0

我想将此数据框保存为分区镶木地板文件:

df.write.mode("overwrite").partitionBy("itemCategory").parquet(path)

对于这个数据框,当我读回数据时,它将具有 String 的数据类型itemCategory.

然而有时,我有来自其他租户的数据框,如下所示。

itemName, itemCategory
Name1, 0
Name2, 1
Name3, 0

在这种情况下,在写入分区后,读回时,结果数据帧将具有 Int 的数据类型itemCategory.

Parquet 文件具有描述数据类型的元数据。如何指定分区的数据类型,以便将其读回为 String 而不是 Int?


如果将“spark.sql.sources.partitionColumnTypeInference.enabled”设置为“false”,spark 会将所有分区列推断为字符串。

在spark 2.0或更高版本中,你可以这样设置:

spark.conf.set("spark.sql.sources.partitionColumnTypeInference.enabled", "false")

在1.6中,像这样:

sqlContext.setConf("spark.sql.sources.partitionColumnTypeInference.enabled", "false")

缺点是每次读取数据时都必须执行此操作,但至少它有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Spark 写入时避免丢失分区数据的数据类型 的相关文章

随机推荐