【发布时间】:2020-01-18 02:17:36
【问题描述】:
我有一个包含普通列的文件和一个包含 Json 字符串的列,如下所示。还附上图片。每一行实际上都属于一个名为 Demo 的列(在图中不可见)。其他列已被删除,并且在 pic 中不可见,因为它们现在不值得关注。
[{"key":"device_kind","value":"desktop"},{"key":"country_code","value":"ID"},{"key":"device_platform","value":"windows"}]
请不要更改 JSON 的格式,因为它在数据文件中与上面一样,除了所有内容都在一行中。
每一行在列下都有一个这样的对象,比如 JSON。这些对象都在一行中,但在一个数组中。我想使用 spark 解析此列并访问其中每个对象的值。请帮忙。
我想要的是获得关键“价值”的价值。我的目标是将每个 JSON 对象中的“值”键的值提取到单独的列中。
我尝试使用 get_json_object。它适用于以下 1) Json 字符串,但为 JSON 2) 返回 null
- {"key":"device_kind","value":"desktop"}
- [{"key":"device_kind","value":"desktop"},{"key":"country_code","value":"ID"},{"key":"device_platform","值":"windows"}]
我试过的代码如下
val jsonDF1 = spark.range(1).selectExpr(""" '{"key":"device_kind","value":"desktop"}' as jsonString""")
jsonDF1.select(get_json_object(col("jsonString"), "$.value") as "device_kind").show(2)// prints desktop under column named device_kind
val jsonDF2 = spark.range(1).selectExpr(""" '[{"key":"device_kind","value":"desktop"},{"key":"country_code","value":"ID"},{"key":"device_platform","value":"windows"}]' as jsonString""")
jsonDF2.select(get_json_object(col("jsonString"), "$.[0].value") as "device_kind").show(2)// print null but expected is desktop under column named device_kind
接下来我想使用 from_Json 但我无法弄清楚如何为 JSON 对象数组构建架构。我发现的所有示例都是嵌套 JSON 对象的示例,但与上述 JSON 字符串没有任何相似之处。
我确实发现在 sparkR 2.2 中 from_Json 有一个布尔参数,如果设置为 true,它将处理上述类型的 JSON 字符串,即 JSON 对象数组,但该选项在 Spark-Scala 2.3.3 中不可用
要清楚输入和预期输出,应如下所示。
i/p 下面
+------------------------------------------------------------------------+
|Demographics |
+------------------------------------------------------------------------+
|[[device_kind, desktop], [country_code, ID], [device_platform, windows]]|
|[[device_kind, mobile], [country_code, BE], [device_platform, android]] |
|[[device_kind, mobile], [country_code, QA], [device_platform, android]] |
+------------------------------------------------------------------------+
预期的 o/p 低于
+------------------------------------------------------------------------+-----------+------------+---------------+
|Demographics |device_kind|country_code|device_platform|
+------------------------------------------------------------------------+-----------+------------+---------------+
|[[device_kind, desktop], [country_code, ID], [device_platform, windows]]|desktop |ID |windows |
|[[device_kind, mobile], [country_code, BE], [device_platform, android]] |mobile |BE |android |
|[[device_kind, mobile], [country_code, QA], [device_platform, android]] |mobile |QA |android |
+------------------------------------------------------------------------+-----------+------------+---------------+
【问题讨论】:
-
你想要的输出是什么?也许这可以帮助:stackoverflow.com/questions/34069282/…
-
解析是什么意思,访问每个对象的值?有点迷茫。
标签: json apache-spark apache-spark-sql schema