我有一个如下所示的数据框。
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(使用前将#替换为@)