【发布时间】:2021-08-26 21:58:28
【问题描述】:
我在这样的数据框中有一个 Json 列(colJson)
{
"a": "value1",
"b": "value1",
"c": true,
"details": {
"qgiejfkfk123": { //unknown value
"model1": {
"score": 0.531,
"version": "v1"
},
"model2": {
"score": 0.840,
"version": "v2"
},
"other_details": {
"decision": false,
"version": "v1"
}
}
}
}
这里的 'qgiejfkfk123' 是动态值,并且随每一行而变化。但是我需要提取 model1.score 和 model2.score。
我试过了
sourceDf.withColumn("model1_score",get_json_object(col("colJson"), "$.details.*.model1.score").cast(DoubleType))
.withColumn("model2_score",get_json_object(col("colJson"), "$.details.*.model2.score").cast(DoubleType))
但没用。
【问题讨论】:
-
不确定我是否做错了什么。但对我不起作用。试过了。 sourceDf.withColumn("model1_score",get_json_object(col("colJson"), "$.details..model1.score").cast(DoubleType)) .withColumn("model2_score",get_json_object(col("colJson"), "$.details..model2.score").cast(DoubleType))
-
嗯,jsonpath 通配符返回列表。我没有意识到的是 Spark 的 jsonPath 实现不支持按索引引用列表元素,例如
$.details..model1[0].score。不知道可以在这里做什么,对不起,但好问题!
标签: json scala apache-spark apache-spark-sql scala-collections