2015-06-28 5 views
1

Мне нужно иметь возможность возвращать список значений из пар (ключ, значение) из RDD при сохранении исходного порядка.Метод PySpark - sortByKey() для возврата значений из пар k, v в исходном порядке

Я включил свое обходное решение ниже, но я хотел бы иметь возможность сделать все за один раз.

Что-то вроде:

myRDD = [(1, 2582), (3, 3222), (4, 4190), (5, 2502), (6, 2537)] 
values = myRDD.<insert PySpark method(s)> 
print values 
>>>[2582, 3222, 4190, 2502, 2537] 

Мой обходной путь:

myRDD = [(1, 2582), (3, 3222), (4, 4190), (5, 2502), (6, 2537)] 

values = [] 
for item in myRDD.sortByKey(True).collect(): 
       newlist.append(item[1]) 
print values 
>>>[2582, 3222, 4190, 2502, 2537] 

Спасибо!

ответ

5

Если в «первоначальном порядке» вы имеете в виду порядок ключей, то все, что вам нужно сделать, это добавить карту после сортировки:

myRDD.sortByKey(ascending=True).map(lambda (k, v): v).collect() 

или вызвать values метод:

myRDD.sortByKey(ascending=True).values().collect() 

Если вы ссылаетесь на порядок значений в структуре, которая была использована для создания исходного RDD, тогда невозможно без дополнительной информации. RDD являются неупорядоченными, если вы явно не применяете преобразования, такие как sortBy.

+0

Спасибо, оба работали! Я пошел с методом l values. – lagunazul

 Смежные вопросы

  • Нет связанных вопросов^_^