我是新手,有一些基本的疑问。我正在研究pyspark应用程序。它应该处理50万个项目。当前的实施效率不高,需要很长时间才能完成。 我将简要解释这些任务。
应用程序处理S3目录。应该处理s3://some-bucket/input-data/
下的所有文件。 S3目录结构如下所示:
s3://some-bucket/input-data/item/Q12/sales.csv
s3://some-bucket/input-data/item/Q13/sales.csv
s3://some-bucket/input-data/item/Q14/sales.csv
csv文件没有项目标识符列。目录的名称是项目标识符,例如Q11
,Q12
等。
应用程序已定义udf
,该应用程序使用boto3下载数据,进行处理,然后将数据转储到S3中的目录结构中,如下所示:
s3://some-bucket/output-data/item/Q12/profit.csv
s3://some-bucket/output-data/item/Q13/profit.csv
s3://some-bucket/output-data/item/Q14/profit.csv
在我看来,对S3进行500K API调用以获取数据。我正在EMR上运行spark应用程序,是否应该将所有数据下载为引导步骤?
S3DistCp (s3-dist-cp)可以通过将整个数据下载到HDFS来解决此问题,以后工作人员/节点可以访问它们。有关如何使用s3-dist-cp
的建议将非常有帮助。