Spark DataFrame API中数组切片是否有类似getField的快捷方式?
Spark DataFrame API数组元素访问的快捷方式问题
在Spark SQL中直接使用data.data.location.geometry.coordinates[0]可以正常取数组元素,但DataFrame API的select方法里这么写会报错——因为API会把方括号里的0解析成字符串,而数组下标需要整数类型。
目前DataFrame API没有像getField那样的纯字符串表达式快捷语法来直接访问数组元素,但有几种更简洁的替代方案:
使用
expr函数嵌入SQL表达式:
这是最接近SQL写法的快捷方式,直接把SQL里的字段表达式传给expr即可:import pyspark.sql.functions as F df.select(F.expr("data.data.location.geometry.coordinates[0]"))使用
[]语法糖(Spark 3.1+):
对列对象使用Python的下标运算符,本质是getItem的语法糖,写法更简洁:import pyspark.sql.functions as F df.select(F.col("data.data.location.geometry.coordinates")[0])显式调用
getItem:
这是最基础的方式,也是你已经知道的方案:import pyspark.sql.functions as F df.select(F.col("data.data.location.geometry.coordinates").getItem(0))
内容的提问来源于stack exchange,提问作者Pdeuxa
相关产品推荐
相关产品推荐

