apache-spark - (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
解决方案
你expr
在使用 sql 时忘记了函数。
sample = spark.createDataFrame([[[1,2,3]]], ['a'])
sample.show()
#+---------+
#| a|
#+---------+
#|[1, 2, 3]|
#+---------+
sample.select(expr("a[0]")).show()
#+----+
#|a[0]|
#+----+
#| 1|
#+----+
推荐阅读
- java - jboss eap 7上的spring boot应用程序部署失败
- c# - SigninManager 没有调用 AccessFailed 和 Lockout 方法
- shell - 字母数字字符串的 Ascii 值
- python - 将一个 csv 文件抑制到另一个值包含特定字符串的文件
- c# - 单元测试不会运行:由于 StackOverflowException 导致进程终止
- javascript - 单击按钮时显示/隐藏 div:未按预期工作?
- c++ - 为什么类构造函数中的参数不变?
- android - Facebook 用户的个人资料图片 URL 在 PICASSO 中不起作用
- twitter-bootstrap - Bootstrap 3 水平 dl:如何更改 dt 宽度?
- android - 自定义TextView无法设置重力