UDF Scala 火花语法

Posted

技术标签:

【中文标题】UDF Scala 火花语法【英文标题】:UDF scala spark syntax 【发布时间】:2018-07-02 14:03:39 【问题描述】:

我试图在 spark 中使用 UDF,并注意到有三种不同的方式来声明 UDF,从 Scala 语法来看,这些声明中的每一个意味着什么,如何以三种不同的方式访问一个 UDF 函数,从 java开发者点最后一个是直截了当的,但前两个不清楚。我现在有点迷茫。

// You could define UDF this way
val upperUDF1 = udf  s: String => s.toUpperCase 

// or this way
val upperUDF2 = udf[String, String](_.toUpperCase)

//or even this way!
def upperUDF3 = udf((data: String) => data.toUpperCase )

感谢@RameshMahrjan,经过一番阅读,我发现我们可以使用花括号或括号,它们是可以互换的。据我了解,UDF 函数被定义为接受泛型值,因此我们可以使用类型参数来调用它。

【问题讨论】:

第一个和第三个没有区别。第二个是不同的,只是使用了类型参数 谢谢@RameshMahrjan 【参考方案1】:

你说的很多种方法,我更喜欢使用以下一种,这对我很有效:

val removeBrackets = udf(input_str:String) =>
    if(input_str != null && (input_str.contains("[") == true || input_str.contains("]") == true) ) 
      input_str.replaceAll("[\\[\\]]","")
     else 
        input_str
    

【讨论】:

以上是关于UDF Scala 火花语法的主要内容,如果未能解决你的问题,请参考以下文章

如果其他,Spark scala udf 错误

[Q]:mysql创建UDF语法错误

火花在UDF中创建数据框

udf 火花列名称

fluent编译UDF的过程中,出现了语法错误

Databricks 火花 UDF 不适用于过滤的数据帧