Python 数组中第n项的SparkSQL sql语法
我有一个json对象,它不幸地结合了嵌套和数组。因此,如何使用spark sql查询它并不十分明显 下面是一个示例对象:Python 数组中第n项的SparkSQL sql语法,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我有一个json对象,它不幸地结合了嵌套和数组。因此,如何使用spark sql查询它并不十分明显 下面是一个示例对象: { stuff: [ {a:1,b:2,c:3} ] } 因此,在javascript中,要获取c的值,我需要编写myData.stuff[0].c 在我的spark sql查询中,如果该数组不存在,我可以使用点表示法: SELECT stuff.c FROM blah 但是我不能,因为最里面的对象被包装在一个数组中 我试过: SELECT stuff.0
{
stuff: [
{a:1,b:2,c:3}
]
}
因此,在javascript中,要获取c
的值,我需要编写myData.stuff[0].c
在我的spark sql查询中,如果该数组不存在,我可以使用点表示法:
SELECT stuff.c FROM blah
但是我不能,因为最里面的对象被包装在一个数组中
我试过:
SELECT stuff.0.c FROM blah // FAIL
SELECT stuff.[0].c FROM blah // FAIL
那么,选择这些数据的神奇方法是什么呢?还是支持?不清楚JSON对象是什么意思,所以让我们考虑两种不同的情况:
import tempfile
path = tempfile.mktemp()
with open(path, "w") as fw:
fw.write('''{"stuff": [{"a": 1, "b": 2, "c": 3}]}''')
df = sqlContext.read.json(path)
df.registerTempTable("df")
df.printSchema()
## root
## |-- stuff: array (nullable = true)
## | |-- element: struct (containsNull = true)
## | | |-- a: long (nullable = true)
## | | |-- b: long (nullable = true)
## | | |-- c: long (nullable = true)
sqlContext.sql("SELECT stuff[0].a FROM df").show()
## +---+
## |_c0|
## +---+
## | 1|
## +---+
# Note: schema inference from dictionaries has been deprecated
# don't use this in practice
df = sc.parallelize([{"stuff": [{"a": 1, "b": 2, "c": 3}]}]).toDF()
df.registerTempTable("df")
df.printSchema()
## root
## |-- stuff: array (nullable = true)
## | |-- element: map (containsNull = true)
## | | |-- key: string
## | | |-- value: long (valueContainsNull = true)
sqlContext.sql("SELECT stuff[0]['a'] FROM df").show()
## +---+
## |_c0|
## +---+
## | 1|
## +---+
另请参见是否有方法覆盖数组的所有元素,例如
stuff[*]
,而不是特定的索引?