总和 MADlib UDF Spark SQL

Posted

技术标签:

【中文标题】总和 MADlib UDF Spark SQL【英文标题】:sum MADlib UDF Spark SQL 【发布时间】:2016-03-21 17:21:03 【问题描述】:

我对如何做到这一点有点迷茫。我正在实现求和函数 MADlib。此函数接受任意数量的数组并添加:

sum ( array [ 1,2] , array [2,3 ] , array [4,5 ] )
Return : [7,10]

我想从下一条语句创建一个函数返回相同的结果,但不知道如何实现这样的东西:

 def sum[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = 
     var i : Int = 0;
     for( arg <- args )
         // Code
         i = i + 1;
     
  

 sqlContext.udf.register("sum", sum(_:WrappedArray[Int]*))
 sqlContext.sql("SELECT sum(collect_list(a),collect_list(b),collect_list(c)) from df").show

【问题讨论】:

这个问题解决了吗? 【参考方案1】:
def sum[T](args: WrappedArray[T]*)(implicit n: Numeric[T]) = 
  args.transpose.map(_.sum)


sum(Array(1, 2), Array(2, 3), Array(4, 5)) // ArrayBuffer(7, 10)

【讨论】:

但是在 Spark SQL 函数中记录几个参数?因为这句话让我失望了sqlContext.udf.register("sum", sum(_:WrappedArray[Int]*)) 我不明白,抱歉。我以为你只需要 // code 部分来实现你描述的逻辑。我提供的函数采用任意数量的 WrappedArray[T] 参数并按照您的描述对它们求和(注意它们的长度必须相等)。 对不起,如果我没有解释清楚。它的功能为我服务,但我无法在 SparkSQL 中注册它以从 sql 调用 你的问题不是很清楚。如果您的问题直接且“直截了当”,您将在 SO 上获得更多帮助。您要求使用代码注释表示的一段代码,并为您提供了具有您想要的签名、返回类型和行为的解决方案。但是现在你仍然觉得问题没有得到解答,而是问一些关于在 SparkSQL 中注册的问题,我对此一无所知。就这个问题而言,我希望我能帮助解决它。也许你应该问另一个关于 SparkSQL 的问题。

以上是关于总和 MADlib UDF Spark SQL的主要内容,如果未能解决你的问题,请参考以下文章

使用 hive udf 函数计算运行总和

spark 能执行udf 不能执行udaf,啥原因

Excel VBA:通过突出显示颜色重新计算UDF总和

spark自定义UDF为啥参数最多21个

spark 能执行udf 不能执行udaf,啥原因

spark 能执行udf 不能执行udaf,啥原因