Върнете RDD от takeOrdered, вместо списък

Използвам pyspark, за да направя малко почистване на данни. Много често срещана операция е да вземете малко подмножество от файл и да го експортирате за проверка:

(self.spark_context.textFile(old_filepath+filename)
    .takeOrdered(100) 
    .saveAsTextFile(new_filepath+filename))

Проблемът ми е, че takeOrdered връща списък вместо RDD, така че saveAsTextFile не работи.

AttributeError: 'list' object has no attribute 'saveAsTextFile'

Разбира се, бих могъл да внедря свой собствен писател на файлове. Или мога да конвертирам списъка обратно в RDD с паралелизиране. Но аз се опитвам да бъда искрящ пурист тук.

Няма ли начин да се върне RDD от takeOrdered или еквивалентна функция?


person Abe    schedule 01.09.2015    source източник


Отговори (1)


takeOrdered() е действие, а не трансформация, така че можете не трябва да връща RDD.
Ако подреждането не е необходимо, най-простата алтернатива би била sample().
Ако все пак искате подреждане, можете да опитате комбинация от filter() и sortByKey(), за да намалите броя на елементите и сортирайте ги. Или, както предложихте, паралелизирайте отново резултата от takeOrdered()

person yurib    schedule 01.09.2015