Pyspark MapReduce Object List



我有一个对象列表定义为:

class AD:
    def __init__(self, name=None, impressions=0):
        self.name = name
        self.impressions= impressions

现在,有没有办法使用 map Reduce 方法来获取按名称分组的更新 AD 列表,并汇总展示次数。例如:

adList = []
ad1 = AD("BlackFriday",29)
ad2 = AD("BlackFriday",33)
ad3 = AD("CyberMonday",35)
adList .append(a1)
adList .append(a2)
adList .append(a3)

我知道我不必使用地图减少功能来获得结果。如果我使用mapreduce,我如何得到以下结果:

newList[0].name = "BlackFriday"
newList[0].impressions = 62
newList[1].name = "CyberMonday"
newList[1].impressions = 35

感谢您的帮助。

以下代码未经测试,因为我没有任何可用的环境

您的意见:

ad1 = AD("BlackFriday",29)
ad2 = AD("BlackFriday",33)
ad3 = AD("CyberMonday",35)

为了能够使用 map + reduce ,您需要一些 RDD(为此,您可以使用 parallelize

rdd = sc.parallelize(list((ad1, ad2, ad3)))

然后,您将 rdds map(name, impressions)元组,以便您可以按键减少 after

rddReduced = rdd.map(lambda a: (a.name, a.impressions)).reduceByKey(lambda x,y : x + y)

然后map返回到 AD 对象并调用 collect 以列表形式获取结果

adList = rddReduced.map(lambda (n,i): AD(n,i)).collect()

相关内容

  • 没有找到相关文章

最新更新