您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Apache Spark将键值对简化为键列表对

使用Apache Spark将键值对简化为键列表对

输入类型和输出类型reduce必须相同,因此,如果要聚合列表,则必须map将输入输入到列表中。之后,将列表合并为一个列表。

您需要一种将列表组合成一个列表的方法。Python提供了一些组合列表的方法

append修改一个列表,并将始终返回None

x = [1, 2, 3]
x.append([4, 5])
# x is [1, 2, 3, [4, 5]]

extend 做相同的事情,但是拆开列表:

x = [1, 2, 3]
x.extend([4, 5])
# x is [1, 2, 3, 4, 5]

这两个方法都返回None,但是您需要一个返回组合列表的方法,因此只需使用加号即可

x = [1, 2, 3] + [4, 5]
# x is [1, 2, 3, 4, 5]

file = spark.textFile("hdfs://...")
counts = file.flatMap(lambda line: line.split(" ")) \
         .map(lambda actor: (actor.split(",")[0], actor)) \

         # transform each value into a list
         .map(lambda nameTuple: (nameTuple[0], [ nameTuple[1] ])) \

         # combine lists: ([1,2,3] + [4,5]) becomes [1,2,3,4,5]
         .reduceByKey(lambda a, b: a + b)

也可以使用来解决此问题combineByKey,它在内部用于实现reduceByKey,但是更加复杂,并且“在Spark中使用专用的每键组合器可以更快” 。对于上层解决方案,您的用例足够简单。

也可以使用来解决此问题groupByKey但是它会降低并行化,因此对于大数据集可能会慢得多。

其他 2022/1/1 18:45:38 有498人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶