Spark union RDDs并保留订单

时间:2017-09-18 16:45:07

标签: apache-spark pyspark rdd

我正在从三个单独的CSV中读取数据到Spark RDD(使用pyspark)。

sc = SparkContext()
rdd_list = []
feattable = ['csv1', 'csv2', 'csv3']
for idx, ftable in enumerate(feattable):
    print("Loading data from: %s" % ftable, idx)
    thisRdd = sc.textFile('hdfs:' + ftable).mapPartitions(lambda line: read_line_csv(line))
    thisRdd = thisRdd.map("some mapping no relevant to question")\
        .reduceByKey("some reducing no relevant to question")\
        .map("final mapping").persist()
    rdd_list.append(thisRdd)

rdd = sc.union(rdd_list).reduceByKey(lambda x,y : x+y)
print(rdd.take(5))

在最终映射期间,为了进行调试,我获得了(user_id, list(len(csv entries per user))的元组。

我运行一次代码并获取:

Loading data from: csv1 0
Loading data from: csv2 1
Loading data from: csv3 2
[('749003', [[2000], [9081], [100]])]

再次跑步我得到:

...
[('749003', [[9081], [100], [2000]])]

再次:

...
[('749003', [[9081], [2000], [100]])]

所以你可以看到我在最终列表中得到一个随机顺序。我希望最终列表能够反映feattable的顺序。如何强制union保留RDD附加到列表的顺序?

0 个答案:

没有答案