当前位置:  开发笔记 > 前端 > 正文

将数据导入Spark时如何设置分区/节点数

如何解决《将数据导入Spark时如何设置分区/节点数》经验,为你挑选了2个好方法。

问题:我想使用以下方法将数据从S3导入Spark EMR:

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

有没有办法可以设置Spark用来加载处理数据的节点数量?这是我处理数据的示例:

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

上下文:数据不是太大,需要很长时间才能加载到Spark中,也需要查询.我认为Spark将数据划分为太多节点.我希望能够手动设置.我知道在处理RDD时sc.parallelize我可以将分区数作为输入传递.此外,我已经看到了repartition(),但我不确定它是否可以解决我的问题.在我的例子中,变量data是一个DataFrame.

让我更准确地定义分区.定义一个:通常被称为"分区键",其中一列中选择和索引,以加快查询(这不是我想要的).定义二:(这是我关注的地方)假设你有一个数据集,Spark决定它将它分布在许多节点上,以便它可以并行地对数据进行操作.如果数据量太小,这可能会进一步减慢进程.我该如何设置该值



1> Durga Viswan..:

默认情况下,它分为200组.您可以在sql上下文中使用set命令进行更改sqlContext.sql("set spark.sql.shuffle.partitions=10");.但是,您需要根据数据特征谨慎设置它.



2> Raju Bairish..:

您可以调用repartition()dataframe来设置分区.您甚至可以spark.sql.shuffle.partitions在创建hive上下文或传递给spark-submit jar后设置此属性:

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

要么

dataframe.repartition(100)

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有