Return 来自 takeOrdered 的 RDD,而不是列表

Return an RDD from takeOrdered, instead of a list

我正在使用 pyspark 进行一些数据清理。一个非常常见的操作是获取文件的一小部分并将其导出以供检查:

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

我的问题是 takeOrdered 是 returning 列表而不是 RDD,所以 saveAsTextFile 不起作用。

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

当然,我可以实现自己的文件编写器。或者我可以使用并行化将列表转换回 RDD。但我想在这里成为一个火花纯粹主义者。

有没有办法从 takeOrdered 或等效函数 return RDD?

takeOrdered() 是一个 action and not a transformation 所以你不能 return 一个 RDD.
如果不需要排序,最简单的替代方法是 sample().
如果你确实想要排序,你可以尝试一些 filter()sortByKey() 的组合来减少元素的数量并对它们进行排序。或者,正如您所建议的,重新并行化 takeOrdered()

的结果