Spark分区 - 使用DISTRIBUTE BY选项

时间:2017-04-07 07:11:58

标签: apache-spark hive hadoop-partitioning

我们有一个Spark环境,应该处理50MM行。这些行包含一个键列。唯一的密钥数量接近2000.我想并行处理所有这些2000密钥。因此我们使用Spark sql,如下所示

hiveContext.sql("select * from BigTbl DISTRIBUTE by KEY")

随后我们有了一个mapPartitions,可以并行地在所有分区上很好地工作。但问题是,它默认只创建200个分区。使用如下命令,我可以增加分区

hiveContext.sql("set spark.sql.shuffle.partitions=500");

然而,在实际生产运行期间,我不知道唯一键的数量是多少。我希望这是自动管理。有没有办法做到这一点。

谢谢

巴拉

1 个答案:

答案 0 :(得分:4)

我建议您使用"重新分配"函数然后将重新分区注册为新的临时表,并进一步缓存它以便更快地处理。

node {   
def gradleHome

stage('Prepare/Checkout') { // for display purposes
    git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'

    dir('a-child-repo') {
       git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
    }

    env.JAVA_HOME="${tool 'JDK8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
    gradleHome = tool '3.4.1' 
}

stage('Build') {
  // Run the gradle build
  if (isUnix()) {
     sh "'${gradleHome}/bin/gradle' clean build"
  } else {
     bat(/"${gradleHome}\bin\gradle" clean build/)
  }
}
}

进一步查询使用" NewBigTbl"