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

Adi*_*ngh 5 java apache-spark apache-spark-dataset

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 |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)

我需要这样:

|json                     | name  |  age |
======================================== 
| "{'a':'john', 'b': 23}" | 'john'| 23 |
----------------------------------------
| "{'a':'joe', 'b': 25}"  | 'joe' | 25 |
----------------------------------------
| "{'a':'zack'}"          | 'zack'|null|
----------------------------------------
Run Code Online (Sandbox Code Playgroud)

我无法找到一种方法。请帮助代码。

Pav*_*tov 2

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

df.selectExpr("get_json_object(json, '$.a') as name", "get_json_object(json, '$.b') as age" )
Run Code Online (Sandbox Code Playgroud)

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

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