【发布时间】:2016-10-20 09:52:41
【问题描述】:
我想使用 SparkSQL 在数组列上 sum(或执行其他聚合函数)。
我有一张桌子
+-------+-------+---------------------------------+
|dept_id|dept_nm| emp_details|
+-------+-------+---------------------------------+
| 10|Finance| [100, 200, 300, 400, 500]|
| 20| IT| [10, 20, 50, 100]|
+-------+-------+---------------------------------+
我想总结这个emp_details 列的值。
预期查询:
sqlContext.sql("select sum(emp_details) from mytable").show
预期结果
1500
180
我也应该能够对范围元素求和:
sqlContext.sql("select sum(slice(emp_details,0,3)) from mytable").show
结果
600
80
当按预期对 Array 类型进行求和时,它表明 sum 期望参数是数字类型而不是数组类型。
我认为我们需要为此创建 UDF。但如何?
UDF 是否会影响性能? 除了UDF之外还有其他解决方案吗?
【问题讨论】:
标签: scala apache-spark apache-spark-sql