2016-12-31 3 views
0

У меня есть запрос. В Pyspark, когда нам нужно получить общее (SUM) на основе (Key, Value), наш запрос читается как:Pyspark - Max/Min Parameter

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

, где, как, когда нам нужно найти MAX/значение MIN для (Key, Value) наш запрос читается как

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

Почему, когда мы Просуммировать данные не используя x[1], Y[1], где, как же является использование для MAX/MIN ?. Просьба уточнить сомнения.

Rgd-х

ответ

0

Вы ошибаетесь, и вы сделали этот код из контекста. В обоих случаях 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.