如何在scala中将String与Array [String]进行比较?
例如,如果" a"属于[" a"," b"," c"]。
我有dataframe df
col1 col2
a [a,b,c]
d [a,b,c]
预期输出
col1 col2 status
a [a,b,c] present
d [a,b,c] missing
我在scala中编写了以下脚本
val arrayContains = udf( (col1: String, col2: Array[String]) =>
if(col2.contains(col1) ) "present" else "missing" )
我在我的数据框中添加了新列,填写了这个新列" status"如下
df.withColumn("status", arrayContains($"col1", $"col2" )).show()
但它会提示我跟踪错误。
(run-main-0)org.apache.spark.SparkException:无法执行用户定义的函数(anonfun $ 1:(string,array)=> string)
我该如何解决这个问题?
答案 0 :(得分:0)
你走了:
import org.apache.spark.sql.functions._
import scala.collection.mutable
+----+---------+
|col1| col2|
+----+---------+
| a|[a, b, c]|
| d|[a, b, c]|
| e|[a, b, c]|
| aa|[a, b, c]|
| c|[a, b, c]|
| f| []|
+----+---------+
def compareStrAgainstArray() = udf((str: String,lst: mutable.WrappedArray[String]) =>
if (lst.exists(str.matches(_)))"present" else "missing")
df.withColumn("status",compareStrAgainstArray()($"col1",$"col2")).show()
+----+---------+-------+
|col1| col2| status|
+----+---------+-------+
| a|[a, b, c]|present|
| d|[a, b, c]|missing|
| e|[a, b, c]|missing|
| aa|[a, b, c]|missing|
| c|[a, b, c]|present|
| f| []|missing|
+----+---------+-------+
希望这有帮助!