2015-09-01 70 views
4

我正在使用pyspark進行一些數據清理。一個非常常見的操作是採取文件的一小十歲上下的子集,並導出進行檢查:從takeOrdered返回RDD,而不是列表

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

我的問題是takeOrdered返回一個列表,而不是一個RDD,所以saveAsTextFile不起作用。

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

當然,我可以實現我自己的文件編寫器。或者我可以將列表轉換回並行化的RDD。但我在這裏試圖成爲一個閃光純粹主義者。

是否有任何方式從takeOrdered或等效函數返回RDD?

回答

8

takeOrdered()action and not a transformation所以你不能讓它返回一個RDD。
如果沒有必要訂購,最簡單的替代方案是sample()
如果您確實需要訂購,可以嘗試使用filter()sortByKey()的某種組合來減少元素數量並對其進行分類。或者,如您所建議的,重新並行化結果takeOrdered()

相關問題