从pyspark df的数组列中的第一个出现到最后一个值进行选择

时间:2019-05-29 12:05:58

标签: apache-spark pyspark

我遇到的问题是必须在“ Mapped_Project_ID”中搜索“ Employee_ID”的第一个匹配项,需要从第一次匹配的匹配项中选择数组中的值,直到最后一个值为止

我有一个如下数据框:

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] 

不确定,如何实现。

有人可以在不需要任何UDF的情况下对此提供帮助或逻辑来处理此问题吗?

1 个答案:

答案 0 :(得分:0)

一旦有了数据框,就可以使用spark 2.4的高阶数组函数(请参见https://docs.databricks.com/_static/notebooks/apache-spark-2.4-functions.html)来过滤掉数组中所有低于Employee_ID列中值的值,如下所示:

myDataframe
  .selectExpr(
    "Employee_Name", 
    "Employee_ID", 
    "filter(Mapped_Project_ID, x -> x >= Employee_ID) as Mapped_Project_ID"
  );