首页 > 解决方案 > (py)SQL 语法中的 Spark getItem()

问题描述

可以使用 检索 Array 类型列的第 n 项getitem(n)。地图类型的列可以使用getItem(key)或分开'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

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

作品

sample.select(f.col('a').getItem(0))
sample.select('a')

不工作

sample.select('a.0')
sample.select('a[0]')
# etc

标签: apache-sparkpysparkapache-spark-sql

解决方案


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

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

sample.show()    

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

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

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

推荐阅读