我们有一个Spark环境,应该处理50MM行。这些行包含一个键列。唯一的密钥数量接近2000.我想并行处理所有这些2000密钥。因此我们使用Spark sql,如下所示
hiveContext.sql("select * from BigTbl DISTRIBUTE by KEY")
随后我们有了一个mapPartitions,可以并行地在所有分区上很好地工作。但问题是,它默认只创建200个分区。使用如下命令,我可以增加分区
hiveContext.sql("set spark.sql.shuffle.partitions=500");
然而,在实际生产运行期间,我不知道唯一键的数量是多少。我希望这是自动管理。有没有办法做到这一点。
谢谢
巴拉
答案 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"