Amazon s3 火花加载许多小型csv需要很长时间
说明 在我的工作场所,我们有大量需要处理的数据。它涉及到数量迅速增长的实例(目前约3000个),这些实例都有几兆字节的数据存储在S3上的Gzip csv文件中 我已经设置了一个spark群集,并编写了一个spark脚本,该脚本执行以下操作Amazon s3 火花加载许多小型csv需要很长时间,amazon-s3,pyspark,spark-csv,Amazon S3,Pyspark,Spark Csv,说明 在我的工作场所,我们有大量需要处理的数据。它涉及到数量迅速增长的实例(目前约3000个),这些实例都有几兆字节的数据存储在S3上的Gzip csv文件中 我已经设置了一个spark群集,并编写了一个spark脚本,该脚本执行以下操作 在每种情况下: 加载数据帧 运行计算 但是还没有保存数据帧(因此没有触发任何操作,我在spark作业UI中确认了这一点) 之后,我将所有数据帧合并成一个数据帧并保存结果(因此触发一个操作) 问题 当我使用少量实例时,上面的方法非常有效。但我发现了以下问题:
- 加载数据帧
- 运行计算
- 但是还没有保存数据帧(因此没有触发任何操作,我在spark作业UI中确认了这一点)
事实证明,我使用spark的方式完全错误,我认为我可以通过将数据分开来简化spark,但结果适得其反。最好的解决方案似乎是将您的输入文件聚合到更大的文件中。并调整您的脚本以使其分开。spark并没有真正优化到处理大量小文件的程度。我不知道如果可能的话,您可以尝试将小文件聚合到更大的文件中,这样做可能会奏效。我会尝试以下方法:
groupby
,并在udf
中加载csv
文件。因此,csv加载将在工作人员之间分配,而不是在驱动程序上运行
(3) groupby
应自动返回组合数据帧。然后你从它开始
希望能有帮助。
请告诉我们你是如何解决这个问题的 我建议您将数据复制到hadoop集群(EMR)上,然后合并这些文件,或者您可以使用
hadoop fs-getmerge
合并文件,谢谢您的建议。每个实例的数据都在增长,但是在soms点上,对于较旧的记录,数据将不再改变。我意识到我误用了spark,而是重写脚本以大批量加载数据。我确实安排了一个额外的列来指示实例id。而且我已经提供了一个度量模式。