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()
的结果
我正在使用 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()