我正在尝试使用sparksql中的transform函数
df2 = spark.sql("select transform(array(1, 2 ,3), (x,y,z) ->x+y+z ) from A group by company_id").show(truncate=False)
预期产量:
[1,2,6] (6 since 3+2+1)
错误:
analysisexception:lambda函数参数“3”的数目与高阶函数“1”所需的参数数目不匹配。;第1行位置33
我正在尝试使用sparksql中的transform函数
df2 = spark.sql("select transform(array(1, 2 ,3), (x,y,z) ->x+y+z ) from A group by company_id").show(truncate=False)
预期产量:
[1,2,6] (6 since 3+2+1)
错误:
analysisexception:lambda函数参数“3”的数目与高阶函数“1”所需的参数数目不匹配。;第1行位置33
1条答案
按热度按时间af7jpaap1#
spark sql转换函数需要一个具有1个或2个参数的lambda函数作为第二个参数,请参见https://spark.apache.org/docs/latest/api/sql/index.html#transform. lambda函数有3个参数(x,y,z)。错误就是这么说的。
另一方面,我猜你不使用转换函数的目的是建立它。transform对数组的每个条目执行一个转换,例如“x->x+1”。它不能取消将数组应用到其元素中并产生一个和。要创建总和,请使用聚合,例如。
aggregate(array(1, 2, 3), 0, (acc, x) -> acc + x)