2017-06-08 60 views
-1

我有一些數據,包括對諸如Do Spark RDD的設置與快速查找相似嗎?

data = [(3,7), (2,4), (7,3), ...] 

這些對應於在圖形我想建立連接。我只想保留數據中包含反向對的對,並且只保留每個對的一個副本。例如,在上面的數據中,我想[(3,7)]因爲反向((7,3))也在數據中。

在Python,我會做這樣的事情:

pairs = set(data) 
edges = [p for p in pairs if p[0] < p[1] and (p[1], p[0]) in pairs] 

我可以做的Spark相似的地方?我能得到的最接近的方式是創建一個新的RDD,其中對反轉,取與原始數據的交集,並根據對元素進行過濾,但效率不高。

回答

-1

< - 語言:蟒蛇 - >

rdd = sc.parallelize([(3, 7), (2, 4), (7, 3)]) \ 
    .map(lambda x: ((min(x), max(x)), [x])) \ 
    .reduceByKey(lambda x, y: x + y) \ 
    .filter(lambda x: len(x[1]) > 1) \ 
    .map(lambda x: x[0]) 

這可以工作,以及

+0

你嘗試運行呢?這給出[(3,7),(2,4)],但是我指定了期望的結果是[(3,7)]。 – ahura