2016-12-05 13 views
1

我想找到每个分区中最大的密钥(也是最后一个密钥),并且每个分区中可能有两个或最多的密钥(彼此相等)。我可以在RDD的每个分区中使用groupByKey吗?或者我如何找到每个分区的最大密钥?

DStream.map(lambda x: (x,1)).transform(lambda rdd: rdd 
.mapPartitions(lambda x: groupByKey(x))).pprint() 

和火花告诉我:

NameError: global name 'groupByKey' is not defined 

所以,我尝试自己编写一个函数,我发现,我从map partitions()得到实体是一个Python迭代器。很难直接获得最后两个或那个项目。

有人能告诉我如何解决这个问题吗?

回答

0

您提供了什么功能,这将在每个执行程序的分区级执行。因此,您可以在该方法中使用最大的关键逻辑,并将结果存储在类型数组的广播变量中,因为每个分区可能有多个值。您可以参考理论here

+0

对不起,我仍然感到困惑。你的意思是我应该使用一个固定的数字作为广播的价值?我知道'广播'可以向所有分区发送一个值,但每个分区中最大的键是不同的,我觉得发送一个相同的号码给每个分区是行不通的。 –

+0

对不起,广播变量是从驱动程序向执行程序发送只读数据。你的要求是从执行者那里得到。你可以得到最大值,并将它发送到输出。由于输出是按每个分区写入的,因此每个值在分区数据中都会有最大值。 – Ramzy

+0

谢谢。那我该怎么做?我无法在每个分区中使用'groupByKey'或'reduceByKey'...所以我需要自己写一个函数? –

相关问题