从EMR上的pyspark到S3或Redshift加载1.5 GB数据帧的平均时间

问题描述 投票:0回答:1

我正在使用一个具有1个主节点(m5.2x大)和4个核心节点(c5.2xlarge)的EMR集群,并在其上运行PySpark作业,该作业将联接5个事实表,每个150个列和10万行,以及5个小尺寸表10列,每列少于100条记录。当我将所有这些都加入时,结果数据框将具有650列和420k记录(大约1.5 GB的数据)。我需要在redshift上将此数据帧加载到一个大的事实表中。

加入数据帧不到一分钟,但是将此数据帧加载到S3或Redshift大约需要6分钟,我认为这是很高的。如果这次正常或仍可以调整,需要专家的建议或指导吗?

我尝试加载分区,镶木地板文件,加载到HDFS,然后使用S3discp到s3,然后重新移位。所有实现都采用相同的6minutes时间范围。

amazon-web-services amazon-s3 pyspark amazon-redshift amazon-emr
1个回答
0
投票

在redshift中加载数据的最佳方法是使用redshift jdbc连接器。

[当您使用jdbc连接器在redshift上写入数据时,它将在s3中创建一个临时目录。并在内部运行复制命令以将数据加载到表中。

现在如何进行优化?

因此,它在内部将文件划分为与redshift群集中可用的切片数量相等,并且每个切片选择文件的一部分,从而使其加载更快且并行。

或者,您可以通过重新分区来分割文件并将其保存在emrfs上,然后手动运行copy命令。

有关所有使用情况的信息,请访问here

© www.soinside.com 2019 - 2024. All rights reserved.