Python Spark变换与RDD元素序的保持

Python Spark变换与RDD元素序的保持,python,apache-spark,pyspark,rdd,Python,Apache Spark,Pyspark,Rdd,我试图理解下面的代码(if)是如何工作的。特别是,我不明白的是,为什么这段代码假设——也许是正确的——RDD中元素的顺序在映射之后被保留。这实质上是这里提出的同一问题的一个例子。我不明白为什么/如何最后一行保证zip实际上使用testData RDD中相应的标签来压缩正确的预测?其中一条注释提到,如果RDD(在本例中为testData)以某种方式排序,那么map将保留该顺序。然而,预测是一个完全不同的RDD。。我不明白这是怎么回事,也不知道为什么 from pyspark.mllib.tree

我试图理解下面的代码(if)是如何工作的。特别是,我不明白的是,为什么这段代码假设——也许是正确的——RDD中元素的顺序在映射之后被保留。这实质上是这里提出的同一问题的一个例子。我不明白为什么/如何最后一行保证zip实际上使用testData RDD中相应的标签来压缩正确的预测?其中一条注释提到,如果RDD(在本例中为testData)以某种方式排序,那么map将保留该顺序。然而,预测是一个完全不同的RDD。。我不明白这是怎么回事,也不知道为什么

from pyspark.mllib.tree import RandomForest
from pyspark.mllib.util import MLUtils
## Split the data into training and test sets (30% held out for testing)
(trainingData, testData) = labeledDataRDD.randomSplit([0.7, 0.3])
## Train a RandomForest model
model = RandomForest.trainClassifier(trainingData, numClasses=2510,
                     categoricalFeaturesInfo={},numTrees=100,
                     featureSubsetStrategy="auto",
                     impurity='gini', maxDepth=4, maxBins=32)

# Evaluate model on test instances and compute test error
predictions = model.predict(testData.map(lambda x: x.features))
labelsAndPredictions = testData.map(lambda lp: lp.label).zip(predictions)

它之所以有效,是因为忽略构建分类器,这里应用的每个转换都使用
mapPartitionsWithIndex
表示。它是一个本地操作,不需要洗牌,因此保留分区成员资格,并在迭代器上应用函数,从而也保留每个分区的值顺序。在更高的层次上,应用的唯一转换是映射,它通过契约保持顺序。@zero323,model.predict确实有意义,因为要进行预测,您只需要特征向量,但预测是一个单独的RDD,即使它是从testData创建的。作为Spark的新手,我想我需要了解其工作原理的细节。你能指出一些有助于理解你提到的细节的阅读材料吗;map是使用mapPartitionsWithIndex实现的??