擅长:python、mysql、java
<p><strong>这不是完整答案</strong></p>
<p>因为我不能把我的发现发表评论,所以我写在这里。在</p>
<p>我可以用一个简单得多的例子来重现你的问题。在</p>
<pre><code>data = xrange(1, 10000)
len(data) #output => 9999
xrangeRDD = sc.parallelize(data, 8)
print xrangeRDD.count()
def plusOne (v,sum):
#print sum, v
return v + 1;
a = xrangeRDD.reduce(plusOne)
print a
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$
<p>对于<code>xrangeRDD = sc.parallelize(data, 4)</code></p>
<p><strong>输出</strong></p>
<pre><code>9999
2502
</code></pre>
<p>对于<code>xrangeRDD = sc.parallelize(data, 1)</code></p>
<p><strong>输出</strong></p>
<pre><code>9999
9999
</code></pre>
<p>因为我只是改变了分区的数量,这也改变了reduce的输出,所以我认为reduce只给出了一个分区的输出,正如这里的模式所建议的那样。在</p>
<p>我还在学习spark是如何工作的。所以我不知道为什么会这样。我希望有人能用这些额外的细节来解释这背后的原因。在</p>