如何在pyspark中获取arraytype()的另一列中某列的值的索引?

y3bcpkx1  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(379)

我用的是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。
谢谢:)

a64a0gku

a64a0gku1#

尝试 exprarray_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|

+---------+---------+-----+

相关问题