【发布时间】:2016-11-18 04:14:31
【问题描述】:
(在“pyspark”中)我有一个包含多个字典的 RDD。这些字典中的每一个又包含多个字典。它看起来像这样:
label1 : {tag1, : count = 2, tag2: count = 3}, {tag2 : count = 3}, {tag3 : count = 1}, ...
label2 : {tag1, : count = 2, tag3: count = 2}, {tag2 : count = 5}, {tag4 : count = 3}, ...
.
.
鉴于这种结构,我希望能够“减少”字典,因此结果具有以下形式:
label1 : {tag1 : count = 2}, {tag : count = 6}, {tag3 : count = 1} ...
label2 : {tag1 : count = 2}, {tag2 : count = 5}, {tag3 : count = 2}, {tag4 : count = 3}...
.
.
.
我感觉这类似于“减少”或“组合”或“分组”,但很难找到正确的功能。您能否指出 Spark 中的哪个功能可以完成这项任务?谢谢!
【问题讨论】:
-
理论上,它代表什么应该无关紧要。从概念上讲,我做了一个 GroupByKey(),根据 Spark 文档,它将键(在本例中为“标签”)映射到“可迭代”(将标签映射到计数的字典列表)。对 GroupByKey() 的调用结果如上所示。
-
您可能不想
GroupByKey,因为这会将您的字典放入可迭代对象中。相反,您应该在 RDD 中完成处理后进行分组(如果您真的需要)。您是否考虑过执行flatten或flatmap,然后按照您的意愿进行组织? -
感谢@EricM。我们有许多文件,其中任何标签(比如 label3)都可以出现在任何文件中。我是 Spark 的新手,但我的方法是收集 label3 指向所有文件的所有字典,并将它们放入“可迭代”中。然后,我想汇总那个“可迭代”。我正在尝试并说我“需要” GroupByKey(),但我并不确定。
-
没关系,学习“在火花中思考”可能需要一段时间。为清楚起见,您有大量的文本文件。文本文件可以在已知位置包含标签。您已经确定了哪些文件具有每个标签,但您现在想计算包含该标签的文件数量?我觉得我错过了什么。
标签: apache-spark pyspark