只想解决以下问题:我要过滤掉,其中包含在一个列中的串的数据帧的所有元组不包含在其被给定为一个黑名单一个(可能是空的)字符串数组。例如:如果黑名单包含“四十二”和“二十三”,则将所有行从其中相应列包含“四十二”或“二十三”的数据帧中过滤出来。创建从一个空数组类型化的阵列列
下面的代码将成功地执行,如果blacklist
不为空(例如阵列(“四十2”))和其他失败(Array.empty [字符串]):
//HELPERs
val containsStringUDF = udf(containsString(_: mutable.WrappedArray[String], _: String))
def containsString(array: mutable.WrappedArray[String], value: String) = {array.contains(value)}
def arrayCol[T](arr: Array[T]) = {array(arr map lit: _*)}
df.filter(!containsStringUDF(arrayCol[String](blacklist),$"theStringColumn"))
该错误消息是:
org.apache.spark.sql.AnalysisException: cannot resolve 'UDF(array(), theStringColumn)' due to data type mismatch: argument 1 requires array<string> type, however, 'array()' is of array<null> type
看起来,空阵列看起来没有类型的火花。有没有很好的方法来处理这个问题?
所以黑名单是一个数组?其实I4m不是很确定你想要做什么 – eliasah
是的,eliasah。它包含我不想在列“theStringColumn”中出现的字符串。 –
你能举个例子吗? (输入,黑名单和预期输出) – eliasah