擅长:python、mysql、java
<p>只是添加了一个关于这个问题的直观和简短(但不好)的解决方案的注释。书<a href="https://rads.stackoverflow.com/amzn/click/com/0672338513" rel="nofollow noreferrer">Sam's Teach Yourself Apache Spark in 24 Hours</a>已经在最后一章很好地解释了这个问题。</p>
<p>使用<code>groupByKey</code>可以像这样轻松地解决问题:</p>
<pre><code>rdd = sc.parallelize([
(u'2013-10-09', 10),
(u'2013-10-09', 10),
(u'2013-10-09', 13),
(u'2013-10-10', 40),
(u'2013-10-10', 45),
(u'2013-10-10', 50)
])
rdd \
.groupByKey() \
.mapValues(lambda x: sum(x) / len(x)) \
.collect()
</code></pre>
<p>输出:</p>
<pre><code>[('2013-10-10', 45.0), ('2013-10-09', 11.0)]
</code></pre>
<p>这是直观和吸引人的,但不要使用它!<code>groupByKey</code>不在映射器上进行任何组合,并将所有单独的键值对带到还原器。</p>
<p>尽量避免<code>groupByKey</code>。使用类似于@pat的<code>reduceByKey</code>解决方案</p>