Apache spark (py)SQL语法中的Spark getItem()

Apache spark (py)SQL语法中的Spark getItem(),apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,可以使用getitemn检索数组类型列的第n项。映射类型的列可以使用getItemkey或“column.key”进行拆分。数组是否有类似的语法 上下文:目标是以可读的方式从大量嵌套的json中获取特定字段 from pyspark import SparkContext from pyspark.sql import SparkSession sc = SparkContext.getOrCreate() spark = SparkSession(sc) sample = spark.cr

可以使用getitemn检索数组类型列的第n项。映射类型的列可以使用getItemkey或“column.key”进行拆分。数组是否有类似的语法

上下文:目标是以可读的方式从大量嵌套的json中获取特定字段

from pyspark import SparkContext
from pyspark.sql import SparkSession

sc = SparkContext.getOrCreate()
spark = SparkSession(sc)

sample = spark.createDataFrame([[[1,2,3]]], ['a'])

sample.show
工作

不起作用

您在使用sql时忘记了expr函数

sample = spark.createDataFrame([[[1,2,3]]], ['a'])

sample.show()    

#+---------+
#|        a|
#+---------+
#|[1, 2, 3]|
#+---------+

sample.select(expr("a[0]")).show()

#+----+
#|a[0]|
#+----+
#|   1|
#+----+

如果将样本注册为临时表,则spark.sqlselect a[0]from T should workyes!让我的超嵌套查询看起来更简单!
sample.select(f.col('a').getItem(0))
sample.select('a')
sample.select('a.0')
sample.select('a[0]')
# etc
sample = spark.createDataFrame([[[1,2,3]]], ['a'])

sample.show()    

#+---------+
#|        a|
#+---------+
#|[1, 2, 3]|
#+---------+

sample.select(expr("a[0]")).show()

#+----+
#|a[0]|
#+----+
#|   1|
#+----+