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

Scala DataFrame中如何比较String与Array[String]?

在Scala Spark中判断字符串是否存在于字符串数组中

我来帮你搞定这个需求,其实有两种靠谱的方式可以实现,咱们一步步看:

方法一:完善你写的自定义UDF

你定义的UDF逻辑是完全正确的,只是调用的时候没传对参数。完整的代码应该是这样的:

import org.apache.spark.sql.functions.udf

// 定义判断数组是否包含指定字符串的UDF
val arrayContains = udf( (targetStr: String, strArray: Array[String]) => 
    if(strArray.contains(targetStr)) "present" else "missing"
)

// 调用UDF给DataFrame添加status列
val resultDF = df.withColumn("status", arrayContains($"col1", $"col2"))

// 查看最终结果
resultDF.show()

执行后就能得到你想要的输出:

+----+---------+-------+
|col1|     col2| status|
+----+---------+-------+
|   a|[a, b, c]|present|
|   d|[a, b, c]|missing|
+----+---------+-------+

方法二:用Spark内置函数(更推荐)

其实Spark已经内置了array_contains函数,完全不用自己写UDF,这种方式不仅代码更简洁,性能也更好(内置函数经过Spark的优化,避免了UDF的序列化开销)。用法如下:

import org.apache.spark.sql.functions.{array_contains, when}

val resultDF = df.withColumn(
    "status",
    // 当col2包含col1时返回present,否则返回missing
    when(array_contains($"col2", $"col1"), "present").otherwise("missing")
)

resultDF.show()

小提醒

注意array_contains的参数顺序是数组列在前,要查找的目标字符串在后,可别搞反了哦~

两种方式都能满足你的需求,但如果是处理大数据量的场景,优先用内置函数的方式,效率会更高。

内容的提问来源于stack exchange,提问作者user9601368

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:22:48