如何将数据导入星火当设置分区/节点的数目

问题描述 投票:14回答:3

问题:我想从使用S3将数据导入到星火EMR:

data = sqlContext.read.json("s3n://.....")

有没有一种方法我可以设置星火用于加载和处理数据节点的数量?这是我如何处理数据的例子:

data.registerTempTable("table")
SqlData = sqlContext.sql("SELECT * FROM table")

背景:数据不是太大,需要很长的时间来加载到Spark和也从查询。我觉得星火将数据划分为节点过多。我希望能够手动设置。我知道有RDDS和sc.parallelize打交道时,我可以通过分区的数量作为输入。另外,我已经看到了repartition(),但我不知道这是否能解决我的问题。变量data是在我的例子一个DataFrame

让我更精确地定义分区。定义一个:通常被称为“分区键”,其中一列中选择和索引,以加快查询(这不是我想要的)。定义二:(这是我关心的是),假设你有一个数据集,星火决定它要它分布在很多节点,因此它可以并行运行的数据操作。如果数据量太小,这可能会进一步放缓的过程。如何设置这个值

sql apache-spark database-partitioning pyspark-sql
3个回答
11
投票

默认情况下,分割成200套。您可以通过在SQL上下文中使用sqlContext.sql("set spark.sql.shuffle.partitions=10"); set命令改变它。然而,你需要与你的数据特征基于谨慎起来设置。


6
投票

您可以拨打repartition()数据框上设置分区。你甚至可以设置spark.sql.shuffle.partitions这个属性创建蜂巢背景下完成,或传递给火花提交的jar:

spark-submit .... --conf spark.sql.shuffle.partitions=100

要么

dataframe.repartition(100)

1
投票

的“输入”分区数由文件系统配置固定。

1个文件1Go,拥有128M的块大小会给你10个任务。我不知道,你可以改变它。

重新分区可以是非常糟糕的,如果你有大量的投入的分区,这将在分区之间做大量洗牌(数据业务)的。

有没有神奇的方法,你必须尝试,并使用WebUI,看看有多少任务生成。

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