微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过匹配 spark rdd 中的小写键来减少

如何解决通过匹配 spark rdd 中的小写键来减少

我有一个 (key,value) 对的 rdd,键是字符串,值是字符串出现的次数

words.take(10)

Out[98]: [('The',2767),('Project',83),('the',3),('of',14941),('Leo',4),('is',3245),('use',80),('anyone',191),('Of',25),('at',4235)]

我想通过 key.lower() 匹配键,对它们的值求和,并保留每个大写\小写键的原始值。

另外,我想过滤掉不重复的键。

所以我上面的 words.take(10) 示例的输出将是:

 [(('The',2770),(('Of',14966)]

解决方法

您可以将 groupbycollect_listfilter 一起使用,如下所示

from pyspark.sql import functions as f

data = [
    ('The',2767),('Project',83),('the',3),('of',14941),('Leo',4),('is',3245),('use',80),('anyone',191),('Of',25),('at',4235)
]

df = spark.createDataFrame(data).toDF(*["word","count"])

df.groupby(f.lower("word").alias("word")) \
  .agg(f.collect_list(f.struct("word","count")).alias("list"),f.sum("count").alias("sum")) \
  .filter(f.size("list") > 1) \
  .select("list","sum") \
  .show(truncate=False)

输出:

+-----------------------+-----+
|list                   |sum  |
+-----------------------+-----+
|[{The,2767},{the,3}]|2770 |
|[{of,14941},{Of,25}]|14966|
+-----------------------+-----+

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。