我目前有一个json文件,我试图用sqlContext.sql()查询,看起来像这样:
{
"sample": {
"persons": [
{
"id": "123",
},
{
"id": "456",
}
]
}
}
如果我只想要输入的第一个值:
sqlContext.sql("SELECT sample.persons[0] FROM test")
但是我想要“人”的所有值而不必写一个循环。循环只消耗太多的处理能力,并且考虑到这些文件的大小,这将是不切实际的。
我以为我可以在[]括号中放置一个范围,但我找不到任何语法来做到这一点。
答案 0 :(得分:3)
如果您的架构如下所示:
root
|-- sample: struct (nullable = true)
| |-- persons: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- id: string (nullable = true)
并希望从structs
数组访问单个persons
,您只需要将其爆炸:
from pyspark.sql.functions import explode
df.select(explode("sample.persons").alias("person")).select("person.id")