我有一个查询。在Pyspark中,当我们需要根据(Key,Value)得到总数(SUM)时,我们的查询如下:
RDD1 = RDD.reduceByKey(lambda x , y: x + y)
当我们需要为(Key,Value)找到MAX / MIN值时,我们的查询读起来像
RDD1 = RDD.reduceByKey(lambda x , y: x if x[1] >= y[1] else y)
为什么当我们汇总数据时不使用x[1]
,Y[1]
,其中MAX / MIN用于哪一个?请澄清疑问。
RGD的
答案 0 :(得分:1)
你错了,你已经脱离了这个代码。在这两种情况下,x
和y
都会引用值。
lambda x , y: x if x[1] >= y[1] else y
相当于:
lambda x, y: max(x, y, key=lambda x: x[1])
它按第二个元素比较值,表示每个值:
__getitem__
)。示例
sc.parallelize([(1, ("a", -3)), (1, ("b", 3))]) \
.reduceByKey(lambda x , y: x if x[1] >= y[1] else y).first()
将为(1, ('b', 3))
,因为3大于-3。