我有一个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])
每个键都有等等。但这显然不是一种优雅的方式,因为可以有更多的键和更多的组合。我将不得不为每个组合编写一个单独的减速器。
有没有更好的方法可以帮助代码的并行化或模块化?