转换函数用法(lambda问题)

8i9zcol2  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(569)

我正在尝试使用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

af7jpaap

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)

相关问题