我有一个表格数据与键和值和键是不唯一的。例如:
+-----+------+
| key | value|
--------------
| 1 | the |
| 2 | i |
| 1 | me |
| 1 | me |
| 2 | book |
| 1 |table |
+-----+------+
现在假设这个表分布在spark集群中的不同节点上。如何使用pyspark计算单词在不同键中的频率?例如,在上面的例子中,我希望输出:
+-----+------+-------------+
| key | value| frequencies |
---------------------------+
| 1 | the | 1/4 |
| 2 | i | 1/2 |
| 1 | me | 2/4 |
| 2 | book | 1/2 |
| 1 |table | 1/4 |
+-----+------+-------------+
2条答案
按热度按时间fdx2calv1#
不确定你是否可以将合并多层次操作与DF结合起来,但是在2个步骤中完成,并将concat留给你,这是可行的:
返回:
你可以重新格式化最后2秒,但我很好奇,如果我们可以做所有在1去。在普通的SQL中,我们会使用内联视图和合并。
这适用于集群标准,Spark通常都是关于什么的。groupBy会考虑到这一切。
次要编辑
因为外面很热,所以我更深入地研究了一下。这是一个很好的概述:http://stevendavistechnotes.blogspot.com/2018/06/apache-spark-bi-level-aggregation.html .在阅读了这篇文章并进行了实验之后,我无法让它更优雅,将输出减少到5行似乎是不可能的。
wj8zmpe12#
另一个可行的选择是窗口函数。首先,定义每个values-keys和for key的出现次数。然后只需添加另一列分数(您将减少分数)