从Spark输出数十亿行



我正试图使用PySpark将一个约有5000000行的RDD输出为文本文件。这需要很长时间,那么关于如何使.saveAsTextFile()更快,有什么建议?

每行有3列,我将保存到HDFS中。

在不知道时间有多长,也不知道每一行的大小或集群的维度的情况下,我只能做出几个猜测。

首先,通常情况下,Spark会为每个分区输出一个文件。如果您的RDD是单个(或几个)分区,那么输出到HDFS或GCS的速度会很慢。在输出之前考虑重新分区(如果你能将重新分区放入管道中,使其更好地完成有用的工作,那么重新分区也需要时间)。您可以随时调用RDD#getNumPartitions来查看RDD中有多少分区,并在需要时智能地重新分析。

我能想到的第二种可能性是,您的HDFS可能供应不足(例如,空间不足),或者存在导致错误的问题,而这些错误并没有很好地显现出来。我希望任何HDFS写入错误对驱动程序都是可见的,但可能在容器日志中。

最新更新