我想将RDD与RDD文件相交。
我的文件由以下行组成:
a d e 112
b c d
a c e
a c d e 112
a e 112
a c d i
b c i
a c d e 112
b c e
a d e i
例如代码:
from pyspark import SparkConf, SparkContext
conf = SparkConf().setAppName("intersection").setMaster("local[*]")
sc = SparkContext.getOrCreate()
finput = sc.textFile("data1.txt")
items = finput.flatMap(lambda x: x.split(" ")).map(lambda word: (word, 1))
itemsT = items.reduceByKey(lambda x, y: x+y)
sortItems = itemsT.sortBy(lambda x: x[1], False)
filterItems = sortItems.filter(lambda x: x[1] >=3)
frequetItems = filterItems.map(lambda x: x[0])
print("frequetItems: ", frequetItems.collect())
...
...
结果如下所示:
frequetItems: ['c', 'a', 'e', 'd', '112', 'b', 'i']
但是,我想在frequentItems和逐行的data1.txt文件之间进行交叉,以获得如下所示的结果:
a e d 112
c d b
c a e
...
...
...
解决上述问题:
lines = finput.map(lambda x: x.split(" "))
intersect = lines.map(lambda x: list(set(x).intersection(frequentItems)))
tranSorte = intersect.map(lambda x: sorted(x, key=lambda y: frequentItems.index(y))).collect()
for line in tranSorte:
print(line)
结果如下:
['a', 'e', 'd', '112']
['c', 'd', 'b']
['c', 'a', 'e']
['c', 'a', 'e', 'd', '112']
['a', 'e', '112']
['c', 'a', 'd', 'i']
['c', 'b', 'i']
['c', 'a', 'e', 'd', '112']
['c', 'e', 'b']
['a', 'e', 'd', 'i']
我认为这对每个人都有好处。 感谢。