kik*_*222 3 python lambda apache-spark pyspark
我正在做一个关于 Spark 的课程,我有点困惑。
所以有下面的代码。我知道第 1 行正在创建元组 (word, 1)。然后第 2 行按单词分组并对计数求和。
我不明白的是,第 2 行中的 X 和 Y 是什么。我们只有一个数字输入到 lamda 函数,即 wordcounts 中的计数列(全部为 1),那么为什么是 y?
wordCounts = words.map(lambda x: (x, 1)) #outputs [('self', 1), ('employment', 1), ('building', 1)...
wordCounts2 = wordCounts.reduceByKey(lambda x, y: x + y) # outputs [('self', 111), ('an', 178), ('internet', 26)
Run Code Online (Sandbox Code Playgroud)
然后,我们有这段代码紧随其后。我知道它对 RDD 进行排序。确认我的理解是 X[1] 字和 X[2] 总数?我猜是,但我不是 100%
对不起,这些愚蠢的问题,但我找不到明确的解释!
wordCountsSorted = wordCounts2.map(lambda x: (x[1], x[0])).sortByKey()
Run Code Online (Sandbox Code Playgroud)
制作一个像 (word, 1) 这样的键值对
现在你的键将是单词,值将是 1
当您执行 reduceByKey 时,它会将同一键的所有值相加
reduceByKey(lambda x, y: x + y)
将通过作为第一个元素的键对 rdd 元素进行分组word
,并对值求和。在这个特定的语句中,x 是一个元素,它累积了 RDD 的所有值,而 y 是相同关键字/单词的每隔一个元素。对于相同的单词或相同的键,通过添加它们的值来减少值。可能看起来像:
# [('This', 1), ('is', 2), ('a', 3), ('random', 1), ('sample.', 2), ('And', 2), ('world', 1), ('count', 2), ('word', 1), ('sample,', 1), ('that', 1), ('it', 1)]
Run Code Online (Sandbox Code Playgroud)
wordCountsSorted = wordCounts2.map(lambda x: (x[1], x[0])).sortByKey()
以下行将交换元组的元素。本质上,位置 0 的元素被移动到位置 1,位置 1 的元素被移动到位置 0。
reversed_tup = wordCounts2.map(lambda x: (x[1], x[0]))
输出看起来像;
# [(1, 'This'), (2, 'is'), (3, 'a'), (1, 'random'), (2, 'sample.'), (2, 'And'), (1, 'world'), (2, 'count'), (1, 'word'), (1, 'sample,'), (1, 'that'), (1, 'it')]
Run Code Online (Sandbox Code Playgroud)
现在,当你这样做时sortByKey
,这些元组将使用上面提到的元组的第一个元素的键进行排序。所以 rdd 将按单词数排序。
wordCountsSorted = reversed_tup.sortByKey()
wordCountsSorted.collect()
# [(1, 'This'), (1, 'random'), (1, 'world'), (1, 'word'), (1, 'sample,'), (1, 'that'), (1, 'it'), (2, 'is'), (2, 'sample.'), (2, 'And'), (2, 'count'), (3, 'a')]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2105 次 |
最近记录: |