我正在处理一个MapReduce问题,我想过滤每个Map分区输出,我只想过滤那些在其map-partition中出现超过阈值的键。
所以我有一个像Array.find()
对于元组的每个值,我想获取其在整个RDD中的出现次数,除以map-partitions。然后,我将过滤此计数。
(key, value<tuple>)
使用flatMapValues我可以将其减少为
Eg: RDD: {(key1, ("a","b","c")),
(key2, ("a","d"),
(key3, ("b","c")}
现在使用{(key1, a), (key1, b), (key1, c), (key2, a), (key2, d), (key3, b), (key3, c)}
步骤,我已经能够获取相应分区中每个值的计数。
假设有两个分区,则它将像
一样返回combineByKey
现在,我要过滤此(键,值),以便值的元组可以构成单个键-值对,即flatMapValues之前为我完成的操作,但是我无法使用flatMapValues
("a", [1, 1]), ("b", [1,1]), ("c", [1,1]), ("d", 1)
预期答案:
python
from itertools import count
import pyspark
import sys
import json
from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.rdd import RDD
sc = SparkContext('local[*]', 'assignment2_task1')
RDD = sc.textFile(sys.argv[1])
rdd1_original = RDD.map(lambda x: x.split(",")).map(lambda x: (x[0], [x[1]])).reduceByKey(lambda x, y: x + y)
rdd3_candidate = rdd1_original.flatMapValues(lambda a: a).map(lambda x: (x[1], 1)).combineByKey(lambda value: (value),lambda x, y: (x + y), lambda x, y: (x,y))
new_rdd = rdd3_candidate.flatMapValues(lambda a:a)
print(new_rdd.collect())
当前错误:
[("a",1),("a", 1), ("b", 1), ("b", 1), ("c", 1), ("c", 1), ("d", 1)