<p>您需要<a href="https://spark.apache.org/docs/latest/api/python/pyspark.html?highlight=rdd#pyspark.RDD.zipWithIndex" rel="nofollow noreferrer">zipWithIndex</a>您的<code>RDDs</code>,此方法用您的数据和另一个表示该条目的索引的值创建一个元组,因此您可以通过<code>index</code>连接{<cd1>}。在</p>
<p>你的方法应该类似于(我打赌还有更有效的方法):</p>
<pre><code>rdd1 = sc.parallelize([u"A", u"B", u"C", u"A", u"Z"])
rdd2 = sc.parallelize(xrange(5))
zdd1 = rdd1.zipWithIndex().map(lambda (v, k): (k, v))
zdd2 = rdd2.zipWithIndex().map(lambda (v, k): (k, v))
print zdd1.join(zdd2).collect()
</code></pre>
<p>输出将是:
<code>[(0, (u'A', 0)), (4, (u'Z', 4)), (1, (u'B', 1)), (2, (u'C', 2)), (3, (u'A', 3))]</code>,在此之后,只需要<code>map</code>来重新组合数据。E、 g.以下:</p>
^{pr2}$
<p>输出将是:
<code>[(u'A', 0), (u'Z', 4), (u'B', 1), (u'C', 2), (u'A', 3)]</code></p>
<p>关于数据类型转换,我以前遇到过这个问题,为了解决这个问题,我使用<a href="https://stackoverflow.com/questions/1207457/convert-a-unicode-string-to-a-string-in-python-containing-extra-symbols">this snippet</a>。在</p>
<pre><code>import unicodedata
convert = lambda (v1, v2): (unicodedata.normalize('NFKD', v1)
.encode('ascii','ignore'), v2)
combinedRDD = combinedRDD.map(convert)
print combinedRDD.collect()
</code></pre>
<p>将输出:<code>[('A', 0), ('Z', 4), ('B', 1), ('C', 2), ('A', 3)]</code></p>