Spark SQL JSON数据集查询嵌套数据结构。

5

我有一个简单的JSON数据集如下。如何查询所有id=1parts.lock

JSON:

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "tags": ["home", "green"],
    "parts" : [
        {
            "lock" : "One lock",
            "key" : "single key"
        },
        {
            "lock" : "2 lock",
            "key" : "2 key"
        }
    ]
}

查询:

select id,name,price,parts.lockfrom product where id=1

重点是如果我使用parts [0].lock,它将返回以下一行:
{u'price': 12.5, u'id': 1, u'.lock': {u'lock': u'One lock', u'key': u'single key'}, u'name': u'A green door'}

但我想返回parts结构中所有的locks。它将返回多个行,但那就是我要找的。这是我想要完成的关系连接。

请帮我解决这个问题。


根据http://apache-spark-user-list.1001560.n3.nabble.com/Spark-SQL-JSON-dataset-query-nested-datastructures-td11841.html,[使用explode的lateral view](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView)似乎很有帮助。 - yhuai
1个回答

1
df.select($"id", $"name", $"price", explode($"parts").alias("elem"))
  .where("id = 1")
  .select("id", "name", "price", "elem.lock", "elem.key").show

+---+------------+-----+--------+----------+
| id|        name|price|    lock|       key|
+---+------------+-----+--------+----------+
|  1|A green door| 12.5|One lock|single key|
|  1|A green door| 12.5|  2 lock|     2 key|
+---+------------+-----+--------+----------+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接