首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDF函数中的数据长度

UDF函数中的数据长度
EN

Stack Overflow用户
提问于 2019-10-11 14:37:54
回答 1查看 53关注 0票数 0

我需要编写一个复杂的用户定义函数(UDF),它以多个列作为输入。类似于:

代码语言:javascript
复制
val uudf = udf{(val:Int, lag:Int, cumsum_p:Double) => val + lag + cum_p} // actually a more complex function but let's make it simple

第三个参数cumsum_p表示的是p的累积和,其中p是计算出的的长度。因为这个udf随后将在groupby中使用。

,我想出了一个解决方案,,这几乎可以:

代码语言:javascript
复制
val uudf = udf{(val:Int, lag:Int, cumsum_p:Double) => val + lag + cum_p}
val w = Window.orderBy($"sale_qty")
df.withColumn("needThat", 
    uudf(col("sale_qty"),
       lead("sale_qty",1).over(w), sum(lit(1/length_group)).over(w)
    )
).show()

问题是,如果我用lit(1/count("sale_qty"))替换lit(1/length_group),创建的列现在只包含一个元素,这会导致错误.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-11 14:54:59

您应该首先计算count("sale_qty")

代码语言:javascript
复制
val w = Window.orderBy($"sale_qty")
df
.withColumn("cnt",count($"sale_qty").over()) 
.withColumn("needThat", 
    uudf(col("sale_qty"),
       lead("sale_qty",1).over(w), sum(lit(1)/$"cnt").over(w)
    )
).show()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58343550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档