gpt4 book ai didi

apache-spark - 如何使用pyspark在group by之后捕获单词的频率

转载 作者:行者123 更新时间:2023-12-02 03:12:41 24 4
gpt4 key购买 nike

我有一个包含键和值的表格数据,并且键不是唯一的。例如:

+-----+------+
| 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 |
+-----+------+-------------+

最佳答案

不确定是否可以将多级操作与 DF 结合起来,但是分两步完成,并将 concat 留给您,这是可行的:

# Running in Databricks, not all stuff required
# You may want to do to upper or lowercase for better results.
from pyspark.sql import Row
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql.types import *

data = [("1", "the"), ("2", "I"), ("1", "me"),
("1", "me"), ("2", "book"), ("1", "table")]
rdd = sc.parallelize(data)
someschema = rdd.map(lambda x: Row(c1=x[0], c2=x[1]))
df = sqlContext.createDataFrame(someschema)

df1 = df.groupBy("c1", "c2") \
.count()

df2 = df1.groupBy('c1') \
.sum('count')

df3 = df1.join(df2,'c1')
df3.show()

返回:

+---+-----+-----+----------+
| c1| c2|count|sum(count)|
+---+-----+-----+----------+
| 1|table| 1| 4|
| 1| the| 1| 4|
| 1| me| 2| 4|
| 2| I| 1| 2|
| 2| book| 1| 2|
+---+-----+-----+----------+

您可以重新格式化最后 2 列,但我很好奇我们是否可以一次性完成所有操作。在普通的 SQL 中,我们会使用内联 View 并结合起来,我怀疑。

这标准地跨集群工作,这就是 Spark 的一般意义所在。 groupBy 考虑了这一切。

小修改

由于外面相当热,我对此进行了更深入的研究。这是一个很好的概述:http://stevendavistechnotes.blogspot.com/2018/06/apache-spark-bi-level-aggregation.html 。读完这篇文章并进行实验后,我无法让它变得更优雅,一次将输出减少到 5 行似乎是不可能的。

关于apache-spark - 如何使用pyspark在group by之后捕获单词的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57180259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com