我有一个Dataset<Row>在java中。我需要读取 1 列的值,它是一个 JSON 字符串,解析它,并根据解析的 JSON 值设置其他几个列的值。我的数据集如下所示:|json | name| age |======================================== | "{'a':'john', 'b': 23}" | null| null |----------------------------------------| "{'a':'joe', 'b': 25}" | null| null |----------------------------------------| "{'a':'zack'}" | null| null |----------------------------------------我需要这样做:|json | name | age |======================================== | "{'a':'john', 'b': 23}" | 'john'| 23 |----------------------------------------| "{'a':'joe', 'b': 25}" | 'joe' | 25 |----------------------------------------| "{'a':'zack'}" | 'zack'|null|----------------------------------------我无法找到一种方法来做到这一点。请帮助代码。
2 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
get_json_object
Spark 中存在一个函数。建议,您有一个名为 的数据框df
,您可以选择这种方式来解决您的问题:
df.selectExpr("get_json_object(json, '$.a') as name", "get_json_object(json, '$.b') as age" )
但首先,确保你的json
属性有双引号而不是单引号。
注意: 这里有完整的 Spark SQL 函数列表。我正在大量使用它。考虑将其添加到书签和不时参考。
大话西游666
TA贡献1817条经验 获得超14个赞
你可以使用 UDF
def parseName(json: String): String = ??? // parse json
val parseNameUDF = udf[String, String](parseName)
def parseAge(json: String): Int = ??? // parse json
val parseAgeUDF = udf[Int, String](parseAge)
dataFrame
.withColumn("name", parseNameUDF(dataFrame("json")))
.withColumn("age", parseAgeUDF(dataFrame("json")))
添加回答
举报
0/150
提交
取消