1
enrio 2020-05-21 18:46:22 +08:00
可以先将数据集进行切分,比如第一次只要"a"开头的 id,第二次只要"b"开头的,以此类推。你可以有各种各样的方法将数据缩小到一个集群能负担的量级。
再一个使用 id 作为 key,将数据分到各个结点上去,这样 Shuffle 也不严重,数据都是在节点内部进行 join 。 对 Spark SQL 不算太了解,不知道它内部会如何进行转化。 |
2
levelworm 2020-05-21 21:18:02 +08:00 via Android
我琢磨着把大的那张表拆分然后一点点和另外一张 join 可以吗?
|
3
bsidb 2020-05-22 08:41:15 +08:00
Spark 2.x 系列中 Spark SQL 的内部实现已经挺优化的,数据量特别大的情况下,如果内存不够会自动利用磁盘。如果数据量特别大,可以在程序中设置 SparkConf 的 spark.sql.shuffle.partitions 选项,将 partition 数量设置调高(默认是 200 ),这样每个 partition 的数据量就比较小,不会撑爆内存。
|
4
SmiteChow 2020-05-22 10:50:57 +08:00
驱动表优化
|
5
SmiteChow 2020-05-22 10:57:02 +08:00
如果没有优化的条件就自己手动创造,例如按照时间手动分批 join,用时间换空间
|
6
MarsBar 2020-05-22 11:07:13 +08:00
首先你 ab 两个表有多少字段 每个字段大概有多大
你的 join 结果需要全部的字段(*)吗 还是只需要一些 这些都会影响到你最后的性能 如同 @bsidb 所说 spark2.x 现在都优化过了 只要不是 cartesian join 正常的集群应该都是能 handle 的住的 |
7
sonice 2020-05-22 14:03:18 +08:00
不带时间窗口的吗?
|