You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark 2.3.0中如何过滤列表列含指定前缀元素的行?

Spark 2.3.0 过滤DataFrame:保留列表含以"V"开头元素的行

需求说明

原始DataFrame结构如下:

NameIRC_List
A[LLL,V23,VLX]
B[LSS,LX3,LLX]
C[LSS,L12,VLX]

需要过滤掉IRC_List中没有任何以"V"开头元素的行,最终结果如下:

NameIRC_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:43:19