【问题标题】:How to get the index of value of a column in another column of ArrayType() in pyspark?如何在pyspark的ArrayType()的另一列中获取列的值索引?
【发布时间】:2020-09-04 19:30:23
【问题描述】:

我使用的是 spark 2.4。
我在 spark 数据框中有一个 ArrayType(StringType()) 列和一个 StringType() 列。我需要在 ArrayType(StringType()) 列中找到 StringType() 列的位置。

示例输入:

+---------------+---------+
|arrayCol       |stringCol|
+---------------+---------+
|['a', 'b', 'c']|'b'      |
+---------------+---------+
|['a', 'b', 'c']|'d'      |
+---------------+---------+

样本输出:

+---------------+---------+-----+
|arrayCol       |stringCol|Index|
+---------------+---------+-----+
|['a', 'b', 'c']|'b'      |2    |
+---------------+---------+-----+
|['a', 'b', 'c']|'d'      |null |
+---------------+---------+-----+

我尝试了 array_position,但它不起作用,并且出现“列不可迭代”错误。
我也尝试过结合 expr、transform 和 array_position,但我想知道 是否有不需要使用 expr 的解决方案
谢谢:)

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    尝试使用 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|
    #+---------+---------+-----+
    

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 2021-12-06
      • 2018-01-30
      相关资源
      最近更新 更多