我有一個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
提交
取消