【问题标题】:pick from first occurrences till last values in array column in pyspark df从 pyspark df 的数组列中的第一次出现直到最后一个值
【发布时间】:2019-10-15 01:08:13
【问题描述】:

我的问题是必须在“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 的情况下提供有关此问题或逻辑以在 spark 中处理此问题的帮助吗?

【问题讨论】:

标签: apache-spark pyspark


【解决方案1】:

获得数据框后,您可以使用 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"
  );

【讨论】:

  • 我正在使用 spark 2.3,这些是我想从精确匹配中选择的字符串值。
  • @DeepanKarSehdev - 欢迎来到 SO。 Mapped_Project_ID 列的类型是“字符串”还是“数组”?
  • 感谢@Shan 的欢迎。是的,它是数组类型。抱歉回复晚了:-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 2019-11-24
  • 1970-01-01
相关资源
最近更新 更多