【发布时间】:2021-03-08 15:14:30
【问题描述】:
我试图更好地理解 reduceByKey 函数,并一直在探索使用它完成不同任务的方法。我想应用如下所示的 RDD 数据。一行数据的格式是一个带有名称的元组,然后是与该名称关联的所有日期的列表(下面是数据外观的副本)
data = [("Cassavetes, Frank", ['2012', '2002', '2009', '2005']),
("Knight, Shirley (I)", ['1997', '2002', '2009']),
("Yip, Françoise", ['2007', '2004', '2000']),
("Danner, Blythe", ['2000', '2008', '2012', '2010', '2004', '2004', '1999', '1998']),
("Buck (X)", ['2002', '2006', '2009'])]
为了获得与元组中每个名称关联的所有日期的计数,我应用了下面的代码,使用 reduceByKey 函数尝试将日期列表转换为列表。
rdd = spark.sparkContext.parallelize(data)
reducedRdd = rdd.reduceByKey( lambda a,b: len(a.split(" ")) + len(b.split(" ")) )
reducedRdd.take(1)
上面的代码产生与输入数据相同的结果,并且不执行reduce函数中列出的任何转换,下面是代码输出的示例:
[('Yip, Françoise', ['2007', '2004', '2000'])]
我预期的输出如下;
[("Yip, Françoise", 3)]
为什么我上面写的代码没有给我预期的输出,我将如何改变它以确保它可以?
【问题讨论】:
标签: apache-spark pyspark rdd