pem*_*fir 14 sql database-partitioning apache-spark pyspark-sql
问题:我想使用以下方法将数据从S3导入Spark EMR:
data = sqlContext.read.json("s3n://.....")
Run Code Online (Sandbox Code Playgroud)
有没有办法可以设置Spark用来加载和处理数据的节点数量?这是我处理数据的示例:
data.registerTempTable("table")
SqlData = sqlContext.sql("SELECT * FROM table")
Run Code Online (Sandbox Code Playgroud)
上下文:数据不是太大,需要很长时间才能加载到Spark中,也需要查询.我认为Spark将数据划分为太多节点.我希望能够手动设置.我知道在处理RDD时sc.parallelize我可以将分区数作为输入传递.此外,我已经看到了repartition(),但我不确定它是否可以解决我的问题.在我的例子中,变量data是一个DataFrame.
让我更准确地定义分区.定义一个:通常被称为"分区键",其中一列中选择和索引,以加快查询(这不是我想要的).定义二:(这是我关注的地方)假设你有一个数据集,Spark决定它将它分布在许多节点上,以便它可以并行地对数据进行操作.如果数据量太小,这可能会进一步减慢进程.我该如何设置该值
Dur*_*aju 11
默认情况下,它分为200组.您可以在sql上下文中使用set命令进行更改sqlContext.sql("set spark.sql.shuffle.partitions=10");.但是,您需要根据数据特征谨慎设置它.
您可以调用repartition()dataframe来设置分区.您甚至可以spark.sql.shuffle.partitions在创建hive上下文或传递给spark-submit jar后设置此属性:
spark-submit .... --conf spark.sql.shuffle.partitions=100
Run Code Online (Sandbox Code Playgroud)
要么
dataframe.repartition(100)
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           22445 次  |  
        
|   最近记录:  |