聚合ArrayType行包含使用高阶函数的浮点数

问题描述 投票:0回答:1

我在Databricks上,我有一个表格,其中包含由数组组成的values列行。阵列本身由浮子组成。我需要一个新的列来总结这些数组。

我受到Databricks博客文章的启发:qazxsw poi

我试过这个:

https://databricks.com/blog/2017/05/24/working-with-nested-data-using-higher-order-functions-in-sql-on-databricks.html

但它不起作用。错误消息是关于:

SELECT   key,
         values,
         REDUCE(values, 0, (value, acc) -> value + acc) summed_values_simple
FROM     nested_data

如果我使用int类型,那么它的工作原理!但我不使用整数。我想弄清楚如何解决这个问题。

这是可重复的表格:

due to data type mismatch: argument 3 requires int type, however, 'lambdafunction' is of float type.

预期输出应如下所示:

CREATE OR REPLACE TEMPORARY VIEW nested_data AS
SELECT   id AS key,

         ARRAY(CAST(RAND(1) * 100 AS FLOAT), CAST(RAND(2) * 100 AS FLOAT), 
         CAST(RAND(3) * 100 AS FLOAT), CAST(RAND(4) * 100 AS FLOAT), CAST(RAND(5) * 100 AS FLOAT)) AS values

FROM range(5)

也许我不应该坚持高阶函数,还有另一种好方法。感谢您提出解决此问题的建议。

apache-spark apache-spark-sql databricks
1个回答
2
投票

Spark SQL中的高阶函数在这一点上相当挑剔,你必须确保输入和输出都符合预期的类型。

在这里,首先是key values summed_values_simple 0 [26.3, 11.6, 66.0, 8.7, 47.6] 160.2 1 [66.0, 8.7, 47.6, 91.4, 6.4] 220.1 2 [8.7, 47.6, 91.4, 6.4, 70.6] 224.7 3 [91.4, 6.4, 70.6, 41.3, 19.8] 219.5 4 [6.4, 70.6, 41.3, 19.8, 12.0] 150.1 累加器就足够了。

CAST
© www.soinside.com 2019 - 2024. All rights reserved.