【发布时间】:2018-06-28 02:56:46
【问题描述】:
我有 2 个数据集,我想创建一个连接数据集,所以我做了
Dataset<Row> join = ds1.join(ds2, "id");
但是为了提高性能,我尝试将 join 替换为 .where(cond)(我也尝试过 .filter(cond)),如下所示:
Dataset<Row> join = ds1.where(col("id").equalTo(ds2.col("id"));
这也有效,但当其中一个数据集为空时不起作用(在这种情况下,它将返回非空数据集),但这不是预期的结果。
所以我的问题是为什么 .where 在这种情况下不能正常工作,或者是否有另一种优化的解决方案可以在不使用 join() 的情况下加入 2 个数据集。
【问题讨论】:
-
为什么你认为
where是对join的性能提升? -
@pault 听专家说的,我也试过测量filter和join的执行时间,filter似乎更快,可能是因为join使用笛卡尔积进行join。
标签: apache-spark apache-spark-sql apache-spark-dataset