关于Spark分区的难题

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

我正在一个项目中,我必须使用boto3读取S3文件(每个压缩文件约3MB)。我有一个小的pyspark脚本,该脚本每小时运行一次以处理文件并生成2种类型的输出数据,这些数据将写回到S3。 pyspark脚本使用“ xmltodict” python库将一些静态数据读入文件处理所需的字典对象中。我有一个运行1个Master和1个Core的小型Amazon EMR集群v5.28。这可能太过分了,但现在不是我主要关注的问题。

问题:1.我怎么知道我应该对数据进行分区?我已经阅读了有关创建多少个分区的文章,但是在IF和WHEN上找不到任何内容。驱动分区的标准是什么-源数据文件中的行数,列数,数据类型,脚本中执行的操作等?我将源文件读入RDD,并将其转换为DF,并通过添加列,分组数据,计数数据等来执行各种操作。Spark如何处理后台分区?2.目前,我手动执行pyspark脚本,如下所示:

spark-submit --master spark://x.x.x.x:7077 --deploy-mode client test.py

在主节点上,因为我决定继续使用Standalone CM。 “ xmltodict”已安装在此节点上,但未安装在Core节点上。似乎不需要在Core节点上安装它甚至配置python3,因为我没有看到任何错误。那是正确的,有人可以澄清这种混乱吗?我试图通过外壳文件作为启动程序安装python库创建群集时,但失败了,坦率地说,尝试了几次后,我放弃了。3.基于分区,我想我对是否使用coalesce()或collect()感到有些困惑。同样,问题是何时使用和何时不使用?

抱歉,有太多问题。现在,我已经编写了pyspark脚本,我正在尝试提高效率。谢谢

apache-spark pyspark amazon-emr
1个回答
0
投票

分区是一种将数据分为最佳大小的块并基于运行多个tasks的机制,每个处理一个数据。如您所见,这是并行性的核心,没有它,就不会大量使用Spark(或任何大数据处理框架)。大多数文件格式都是可拆分的,某些文件格式在压缩时是可拆分的,例如Avro,镶木地板,兽人等。某些文件格式在压缩时是不可拆分的,例如zip,gzip等。取决于正在处理的文件的大小以及它们被处理的能力。拆分后,Spark自动创建多个分区并并行处理数据。在您的情况下,数据为zip格式,一个文件将成为一个分区,并且一次最多可以处理1个CPU。如果此zip较小,则可以,但是如果较大,则其处理将很慢。

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