嗨,怎么样?我是一个python开发人员,正在尝试学习sparkscala。我的任务是创建日期范围容器,并计算每个容器中出现的频率(直方图)。
我的输入Dataframe看起来像这样
我的箱子边缘是这样的(在python中):
bins = ["01-01-1990 - 12-31-1999","01-01-2000 - 12-31-2009"]
我要查找的输出Dataframe是(每个bin的原始Dataframe中有多少个值的计数):
有没有人可以指导我如何做这是Spark斯卡拉?我有点迷路了。谢谢您。
2条答案
按热度按时间lrl1mhuk1#
您是否希望得到如下结果:
它可以通过少量sparksql和pivot函数实现,如下所示
检查左连接条件
不过,由于您有2个bin范围,因此将生成2行。
pobjuy322#
我们可以通过观察
date
列并确定每个记录落在哪个范围内。到现在为止,一直都还不错。我们有日期条目要处理,它们就像你的格式(
MM-dd-yyyy
). 接下来,我们需要一个函数,如果日期在范围内,则返回1,如果不在范围内,则返回0。我们创造了一个UserDefinedFunction
(udf)这样我们就可以将它同时应用于spark执行器中的所有行。现在我们有了
UDF
设置时,我们在DataFrame
并按给定的bins进行分组,将值相加(因此,我们将函数的值计算为Int
)最后我们
select
我们的垃圾箱和groupBy
他们和sum
.2450+3653+3897=10000,看来我们的工作是对的。也许我做得太多了,有一个更简单的解决办法,请告诉我,如果你知道更好的方法(特别是处理问题)
MM-dd-yyyy
日期)。