通过Spark Streaming中的多个键组合减少

时间:2016-01-21 07:53:54

标签: python apache-spark mapreduce pyspark spark-streaming

我有一个spark工作,它会监听kinesis流并对其进行一些聚合。 DStream中的RDD结构如下 - {“name”:“abc”,“sex”:“M”,“age”:25,“points”:2},.....

我想计算不同键组合中所有点的总和,即名称,性别,年龄,性别_,姓名,等等

我现在这样做的方式如下 -

count_by_name = instream.map(lambda x: (x.get('name'), x.get('points'))).reduceByKey(lambda x, y: x[1]+y[1])
count_by_age = instream.map(lambda x: (x.get('age'), x.get('points')).reduceByKey(lambda x, y: x[1] + y[1])
count_by_age_and_sex = instream.map(lambda x: (x.get('age')+'_'+x.get('sex'), x.get('points'))).reduceByKey(lambda x, y: x[1]+y[1])
每个键都有

等等。但这显然不是一种优雅的方式,因为可以有更多的键和更多的组合。我将不得不为每个组合编写一个单独的减速器。

有没有更好的方法可以帮助代码的并行化或模块化?

0 个答案:

没有答案