簡體   English   中英

如何刪除元素,如何從一個rdd的其他rdd刪除elemts並在pyspark中創建新的rdd?

[英]How to remove elements how to delete elemts from one rdd based on other rdd and create new rdd in pyspark?

我已經如下創建了2個Rdd

rdd=sc.parallelize([(0,'A'),(0,'B'),(1,'D'),(1,'B'),(1,'C'),(2,"A"),(2, "B"),(2, "E")])
rdd1=rdd.groupByKey().map(lambda x :list(x[1]))
rdd1.collect()
[['A', 'B'], ['D', 'B', 'C'], ['A', 'B', 'E']]
rdd2=sc.parallelize(['D','E'])
rdd2.collect()
Out[204]: ['D', 'E']

現在,我想從rdd1中刪除元素(如果它在rdd2中出現),即

我在rdd2中有2個元素('D','E')

現在,我想從rdd1刪除此元素。

我期望的rdde3是:

[['A', 'B'], ['B', 'C'], ['A', 'B']]

首先將第二個rdd的所有元素收集到一個列表中。 應用過濾條件,然后進行分組。

from pyspark import SparkContext

sc = SparkContext('local')
rdd=sc.parallelize([(0,'A'),(0,'B'),(1,'D'),(1,'B'),(1,'C'),(2,"A"),(2, "B"),(2, "E")])
print(rdd.collect())
rdd1=rdd.groupByKey().map(lambda x :list(x[1]))
list1 = rdd1.collect()
print(list1)
rdd2=sc.parallelize(['D','E'])
list2 =rdd2.collect()
print(list2)

rdd2list = rdd2.collect()
filteredrdd = rdd.filter(lambda x: x[1] not in rdd2list)
finalrdd=filteredrdd.groupByKey().map(lambda x :list(x[1]))
print(finalrdd.collect())

這是finalrdd輸出:

[['A', 'B'], ['B', 'C'], ['A', 'B']]

根據您的評論更新:

def filter_list(x):
    return [ele for ele in x if ele not in rdd2list]


final2rdd = rdd1.map(lambda x: filter_list(x))
print(final2rdd.collect())

這是final2rdd的輸出,與之前相同:

[['A', 'B'], ['B', 'C'], ['A', 'B']]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM