【发布时间】:2017-10-28 21:30:54
【问题描述】:
我需要使用 Spark 将 Map(键值对)保存在一列中。要求是其他人可以将数据与其他工具(如 PIG)一起使用,因此最好将 Map 保存为通用格式而不是特殊格式的字符串。我使用此代码创建列:
StructField("cMap", DataTypes.createMapType(StringType, StringType), true) ::
然后在我创建数据框后,我得到了架构:
|-- cMap: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
然后我将数据框保存到 Json:
df.write.json(path)
我发现Json输出是:
"cMap":{"1":"a","2":"b","3":"c"}
所以一旦我下次从文件中读取它:
val new_df = sqlContext.read.json(path)
我得到了架构:
|-- cMap: struct (nullable = true)
| |-- 1: string
| |-- 2: string
| |-- 3: string
是否有任何有效的方法可以在不进行额外处理的情况下在 Json 中保存和读取地图(我可以将地图保存为特殊字符串并对其进行解码,但我认为它不应该那么复杂)。谢谢。
【问题讨论】:
标签: java sql json scala apache-spark