apache-spark - Spark:哪里不能正常工作
问题描述
我有 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()
.
解决方案
当您想要加入两个 RDD 时,绝对关键点之一是在这两个 RDD 上使用的分区器。如果第一个和第二个 rdd 具有相同的分区器,那么您的连接操作将处于最佳性能。如果分区器不同,那么第一个 rdd 的分区器将用于对第二个 rdd 进行分区。
然后尝试只使用“轻键”,例如使用字符串的编码或散列输出,而不是使用原始的,以及两个 rdds 的相同分区器。
推荐阅读
- android - 我无法将菜单图标添加到 Visual Studio xamarin 中的工具栏
- python - 如何自动管理数据库中的序列号?
- r - 具有高尔距离的层次聚类 - hclust() 和 philentropy::distance()
- arrays - 通过智能指针修复对象指针成员的分配
- mysql - 每个类别的mysql总和和计数附加到匹配的类别行
- javascript - Promise.all() 被拒绝后的值,显示 [''PromiseStatus'']: resolved if catch block is present
- javascript - 如何从graphQL服务器对对象数组中的数据进行排序?
- javascript - 退订 Firebase 实时数据库
- android - Kotlin如何在参数中模拟函数
- animation - D3 向上计数的过渡