spark.sql("""select get_json_object('{"k":{"value":"abc"}}', '$.*.value') as j""").show()
這會導致 null 而它應該回傳“abc”。如果我替換*為k.
我知道有限的 JSONPath 支持(https://cwiki.apache.org/confluence/display/Hive/LanguageManual UDF#LanguageManualUDF-get_json_object)
但有沒有辦法實作這一點是 Spark SQL。
uj5u.com熱心網友回復:
有一個 Spark JIRA“任何深度搜索在 get_json_object ($..foo) 中不起作用”開放以獲得完整的 JsonPath 支持。
在解決之前,恐怕創建一個使用“通用”JsonPath 實作的 UDF 可能是唯一的選擇:
> spark-shell --jars "json-path-2.7.0.jar"
:
scala> import com.jayway.jsonpath.JsonPath
import com.jayway.jsonpath.JsonPath
scala> val r = JsonPath.read[net.minidev.json.JSONArray]("""
| {"k":{"value":"abc"},
| "m":{"value":"def"}}
| ""","$.*.value")
r: net.minidev.json.JSONArray = ["abc","def"]
scala>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429923.html
