为了账号安全,请及时绑定邮箱和手机立即绑定

需要根据 1 列的值在数据集的列中设置值

需要根据 1 列的值在数据集的列中设置值

HUH函数 2023-01-05 17:25:08

我有一个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贡献1561条经验 获得超3个赞

get_json_objectSpark 中存在一个函数。建议,您有一个名为 的数据框df,您可以选择这种方式来解决您的问题:

df.selectExpr("get_json_object(json, '$.a') as name", "get_json_object(json, '$.b') as age" )

但首先,确保你的json属性有双引号而不是单引号。

注意: 这里有完整的 Spark SQL 函数列表。我正在大量使用它。考虑将其添加到书签和不时参考。


查看完整回答
反对 回复 2023-01-05
?
大话西游666

TA贡献1551条经验 获得超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")))


查看完整回答
反对 回复 2023-01-05

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信