从takeOrdered返回RDD,而不是列表



我使用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。但我想做一个纯粹的火花主义者。

是否有任何方法从takeOrdered或等效函数返回RDD ?

takeOrdered()是一个动作,而不是一个转换,所以你不能让它返回一个RDD。
如果不需要排序,最简单的替代方案是sample()
如果您确实需要排序,您可以尝试filter()sortByKey()的某种组合来减少元素的数量并对它们进行排序。或者,如您所建议的,重新并行化takeOrdered()

的结果

最新更新