Spark UDF变长参数的二三事儿
在复杂业务逻辑中,我们经常会用到Spark的UDF,当一个UDF需要传入多列的内容并进行处理时,UDF的传参该怎么做呢? 下面通过变长参数引出,逐一介绍三种可行方法以及一些不可行的尝试... 引子 变长参数对于我们来说并不陌生,在Java里我们这么写 publicvoidvarArgs(String...args) 在Scala里我们这么写 defvarArgs(cols:String*):String 而在Spark里,很多时候我们有自己的业务逻辑,现成的functions满足不了我们的需求,而当我们需要处理同一行的多个列,将其经过我们自己的逻辑合并为一个列时,变长参数及其变种实现可以给我们提供帮助。 但是在Spark UDF里我们是 无法使用变长参数传值 的,但之所以本文以变长参数开头,是因为需求起于它,而通过对它进行变换,我们可以使用变长参数或Seq类型来接收参数。 下面通过Spark-Shell来做演示,以下三种方法都可以做到多列传参,分别是 变长参数(接受array类型) Seq类型参数(接受array类型) Row类型参数(接受struct类型) 变长参数类型的UDF 定义...
