Вернуть 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 с помощью parallelize. Но я пытаюсь быть пуристом искры здесь.

Нет ли способа вернуть RDD из takeOrdered или эквивалентной функции?


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


Ответы (1)


takeOrdered() — это действие, а не преобразование, поэтому вы можете , чтобы он не возвращал RDD.
Если упорядочивание не требуется, простейшей альтернативой будет sample().
Если вы хотите упорядочить, вы можете попробовать некоторую комбинацию filter() и sortByKey(), чтобы уменьшить количество элементов и сортировать их. Или, как вы предложили, перепараллелить результат takeOrdered()

person yurib    schedule 01.09.2015