我用的是spark 2.4。
我在sparkDataframe中有一个arraytype(stringtype())列和一个stringtype()列。我需要找到stringtype()列在arraytype(stringtype())列中的位置。
样本输入:
+---------------+---------+
|arrayCol |stringCol|
+---------------+---------+
|['a', 'b', 'c']|'b' |
+---------------+---------+
|['a', 'b', 'c']|'d' |
+---------------+---------+
样本输出:
+---------------+---------+-----+
|arrayCol |stringCol|Index|
+---------------+---------+-----+
|['a', 'b', 'c']|'b' |2 |
+---------------+---------+-----+
|['a', 'b', 'c']|'d' |null |
+---------------+---------+-----+
我尝试了数组的位置,但它不工作,我得到“列是不可iterable”错误。
我也尝试过组合expr、transform和array\u position,但我想知道是否有一种解决方案不需要使用expr。
谢谢:)
1条答案
按热度按时间a64a0gku1#
尝试
expr
与array_position
功能。Example:
```df.show()
+---------+---------+
| arrayCol|stringCol|
+---------+---------+
|[a, b, c]| b|
|[a, b, c]| d|
+---------+---------+
from pyspark.sql.functions import *
df.withColumn("Index",expr('if(array_position(arrayCol,stringCol)=0,null,array_position(arrayCol,stringCol))')).
show()
+---------+---------+-----+
| arrayCol|stringCol|Index|
+---------+---------+-----+
|[a, b, c]| b| 2|
|[a, b, c]| d| null|
+---------+---------+-----+