从takeOrdered返回RDD,而不是列表

Abe*_*Abe 4 python apache-spark rdd

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

(self.spark_context.textFile(old_filepath+filename)
    .takeOrdered(100) 
    .saveAsTextFile(new_filepath+filename))
Run Code Online (Sandbox Code Playgroud)

我的问题是takeOrdered返回一个列表而不是RDD,所以saveAsTextFile不起作用.

AttributeError: 'list' object has no attribute 'saveAsTextFile'
Run Code Online (Sandbox Code Playgroud)

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

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

yur*_*rib 8

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