首页 > 解决方案 > Pyspark:如何根据另一列中的匹配值从数组中的第一次出现中选择直到最后的值

问题描述

我有一个数据框,我需要在其中搜索一个列中存在的值,即另一列中的StringType,即ArrayType,但我想从第一列的第一次出现中选择第二列中的值直到数组中的最后一个值。

下面用例子解释:

输入 DF 如下:

Employee_Name|Employee_ID|Mapped_Project_ID
Name1|E101|[E101, E102, E103]
Name2|E102|[E101, E102, E103]
Name3|E103|[E101, E102, E103, E104, E105] 

输出 DF 应如下所示:

Employee_Name|Employee_ID|Mapped_Project_ID
Name1|E101|[E101, E102, E103]
Name2|E102|[E102, E103]
Name3|E103|[E103, E104, E105] 

标签: pysparkpyspark-sql

解决方案


从 Spark 2.4 开始,您可以使用array_positionslice功能:

import pyspark.sql.functions as f    
from pyspark.sql.functions import array_position
from pyspark.sql.functions import slice

df = spark.createDataFrame([(["c", "b", "a","e","f"],'a')], ['arraydata','item'])

df.select(df.arraydata, f.expr("slice(arraydata,array_position(arraydata, item),size(arraydata))").alias("res")).show()

+---------------+---------+
|      arraydata|      res|
+---------------+---------+
|[c, b, a, e, f]|[a, e, f]|
+---------------+---------+

请把它翻译成你的 df colnames。希望这可以帮助。


推荐阅读