spark scala列Map

f1tvaqid  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(444)

在scala中实现的spark作业中,我尝试将两个结构化列Map到它们的json字符串表示形式。

data =  data
 .withColumn("zones",   data("zones").cast(StringType))
 .withColumn("maps", data("maps").cast(StringType))

其中“zones”是一个列表,“maps”是一个map<string,string>。
我希望能够将udt列表序列化为:

[{code:'FOO',name:'Foo',type:'BAR',client_code:NULL}]

和传感器U值序列化为:

{'my_key':'myValue','my_key2':'myValue2'}

我找不到如何访问我的列值以对其应用转换。

dbf7pr2w

dbf7pr2w1#

以下是找到的解决方案:

val mapToJSon: Map[String,String] => String = scala.util.parsing.json.JSONObject(_).toString()
val mapToJSonUDF = udf(mapToJSon)

data =  data
 .withColumn("zones", to_json(data("zones")))
 .withColumn("maps", mapToJSonUDF(data("maps")))

我猜它不是最好的,因为scala.util.parsing.json.jsonobject现在是一个不推荐使用的类。

相关问题