【发布时间】:2016-03-15 15:50:22
【问题描述】:
Spark (1.5.2) 中的分区计数在某些 sql 查询中会爆炸。
可以避免吗?
就我而言,我有三个表(文本、所有者、人员),我在这些表上执行以下查询:
sqlContext.sql(
"SELECT t.* FROM texts t JOIN ("+
"SELECT o.TextId FROM "+
"owners o JOIN ("+
"SELECT UserId FROM person WHERE LOWER(name) "+
"RLIKE '.*"+escapeRegex(filter.name)+"\\s*$'"+
") p ON (o.UserId=p.UserId) GROUP BY o.TextId"+
") o "+
"ON (t.TextId = o.TextId)")
查询前的分区数为2,之后使用textsDF.javaRDD().partitions().size()得到200
【问题讨论】:
-
嗨乔纳森,你找到你要找的东西了吗?
-
Jonathan,默认为 200。查看此链接 spark.apache.org/docs/latest/sql-programming-guide.html 并搜索该属性。
-
为了避免使用默认值,您应该按照我的建议在代码中设置您自己的属性以降低值(到 2 或 4)。然后你会得到更少的分区。
标签: apache-spark-sql spark-dataframe