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

我有一个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|

----------------------------------------

我无法找到一种方法来做到这一点。请帮助代码。


HUH函数
浏览 92回答 2
2回答

繁星点点滴滴

get_json_objectSpark 中存在一个函数。建议,您有一个名为 的数据框df,您可以选择这种方式来解决您的问题:df.selectExpr("get_json_object(json,&nbsp;'$.a')&nbsp;as&nbsp;name",&nbsp;"get_json_object(json,&nbsp;'$.b')&nbsp;as&nbsp;age"&nbsp;)但首先,确保你的json属性有双引号而不是单引号。注意:&nbsp;这里有完整的 Spark SQL 函数列表。我正在大量使用它。考虑将其添加到书签和不时参考。

大话西游666

你可以使用 UDFdef parseName(json: String): String = ??? // parse jsonval parseNameUDF = udf[String, String](parseName)def parseAge(json: String): Int = ??? // parse jsonval parseAgeUDF = udf[Int, String](parseAge)dataFrame.withColumn("name", parseNameUDF(dataFrame("json"))).withColumn("age", parseAgeUDF(dataFrame("json")))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java