Spark 2.3.0中如何过滤列表列含指定前缀元素的行?
Spark 2.3.0 过滤DataFrame:保留列表含以"V"开头元素的行
需求说明
原始DataFrame结构如下:
| Name | IRC_List |
|---|---|
| A | [LLL,V23,VLX] |
| B | [LSS,LX3,LLX] |
| C | [LSS,L12,VLX] |
需要过滤掉IRC_List中没有任何以"V"开头元素的行,最终结果如下:
| Name | IRC_List |
|---|---|
| A | [LLL,V23,VLX] |
| C | [LSS,L12,VLX] |
实现代码
Spark 2.3.0支持高阶函数exists,可直接用来判断列表中是否存在符合条件的元素,无需自定义UDF:
Scala 版本
import org.apache.spark.sql.functions._ // 创建示例DataFrame val df = spark.createDataFrame(Seq( ("A", Array("LLL", "V23", "VLX")), ("B", Array("LSS", "LX3", "LLX")), ("C", Array("LSS", "L12", "VLX")) )).toDF("Name", "IRC_List") // 过滤条件:IRC_List中存在以"V"开头的元素 val filteredDf = df.filter(exists(col("IRC_List"), x => x.startsWith("V"))) // 展示结果 filteredDf.show(false)
Python 版本
from pyspark.sql.functions import exists, col # 创建示例DataFrame df = spark.createDataFrame([ ("A", ["LLL", "V23", "VLX"]), ("B", ["LSS", "LX3", "LLX"]), ("C", ["LSS", "L12", "VLX"]) ], ["Name", "IRC_List"]) # 过滤条件 filtered_df = df.filter(exists(col("IRC_List"), lambda x: x.startswith("V"))) # 展示结果 filtered_df.show(truncate=False)
代码说明
exists函数接收两个参数:要检查的数组列,以及判断元素是否符合条件的表达式。x.startsWith("V")用来校验数组元素是否以"V"开头,只要数组中有一个元素满足该条件,该行就会被保留。
内容的提问来源于stack exchange,提问作者zskar99
相关产品推荐
相关产品推荐

