2016-12-31 99 views
0

我有一个查询。在Pyspark当我们需要基于获得总(SUM)(键,值),我们的查询倒像是:Pyspark - 最大/最小参数

RDD1 = RDD.reduceByKey(lambda x , y: x + y) 

地方,当我们需要找到MAX/MIN值(键,值)我们的查询读起来就像

RDD1 = RDD.reduceByKey(lambda x , y: x if x[1] >= y[1] else y) 

在不使用x[1]Y[1],其中作为同样是使用了MAX/MIN为什么我们总结的数据?请澄清疑问。

Rgd的

回答

0

你错了,你已经把这段代码取消了上下文。在这两种情况下,xy都是指数值。

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大。