向Spark用户定义的函数的列添加附加参数

时间:2018-11-05 08:33:30

标签: scala apache-spark user-defined-functions

是否可以在列中添加参数到spark UDF。我知道您可以在Scala中使用curring,但是它并不能像我喜欢的那样工作。

让我们以该功能为例:

def containsWord(word: String, words: Seq[String]): Boolean = {
  for (w <- words) if (word.contains(w)) return true
  false
}

字符串是我想从列中获取的参数。如果没有第二个参数,我可以使用udf函数创建UDF并将其列作为参数。如何在UDF调用中添加字符串序列?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您实际上不需要在这里粗鲁(尽管想法很相似)。您只需定义一个将序列作为参数并返回udf的函数即可:

imageObj.onload

然后像这样使用它:

def containsWord(words : Seq[String]) = udf((word : String) => words.contains(word))

它给你这个:

sc.parallelize(Seq("a", "b", "c", "d", "e"))
    .toDF("A")
    .withColumn("B", containsWord(Seq("a", "b", "d"))($"A"))
    .show