Как найти МИН и МАКС для СДР - PullRequest
1 голос
/ 03 мая 2019

Мой СДР имеет следующий формат:

RDD1=[['2','1','3','4'],['1','2','3','4'],['5','3','4','1']....['1','3','4','5']]

или

RDD1=[('2','1','3','4'),('1','2','3','4'),('5','3','4','1')....('1','3','4','5')]

Я хочу, чтобы значение o / p, которое находит минимальное / максимальное значения в столбцах как

RDD_OUT_MAX=[('5','3','4'...'5')]

RDD_OUT_Min=[('1','1','3'...'1')]

как мы можем достичь с помощью кода Pyspark, можем ли мы использовать любую карту / уменьшить для нахождения MIN / Max. Пожалуйста, помогите

rdd=df1.rdd.map(list)
rdd=df1.rdd.map(tuple)

Я попробовал ниже, но не повезло

rdd1.min()
rdd1.max()

1 Ответ

1 голос
/ 03 мая 2019

Вы можете использовать метод reduce().Попробуйте это:

>>> rdd.reduce(lambda x,y:
(min(x[0],y[0]),min(x[1],y[1]),min(x[2],y[2]),min(x[3],y[3])))
(1, 1, 3, 1)
>>> rdd.reduce(lambda x,y: (max(x[0],y[0]),max(x[1],y[1]),max(x[2],y[2]),max(x[3],y[3])))
(5, 3, 4, 5)

Парные проверки мин / макс для каждой записи кортежа на протяжении всего rdd.

Немного короче, но труднее читать:

>>> rdd.reduce(lambda x,y: tuple(map(min, zip(x,y))))
(1, 1, 3, 1)
>>> rdd.reduce(lambda x,y: tuple(map(max, zip(x,y))))
(5, 3, 4, 5)

Вы можете думать об этом как о расширении следующим образом:

lambda x,y: tuple(map(max, zip(x,y))) =
lambda x,y: tuple(map(max, [(x[0],y[0]),(x[1],y[1]),(x[2],y[2]),(x[3],y[3])]) =
lambda x,y: tuple([max(x[0],y[0]),max(x[1],y[1]),max(x[2],y[2]),max(x[3],y[3])]) =
lambda x,y: (max(x[0],y[0]),max(x[1],y[1]),max(x[2],y[2]),max(x[3],y[3]))

На практике используются генераторы, поэтому необходим конечный tuple().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...