在 Spark 与 Spark 广播变量中处理 Hive Lookup 表
Processing Hive Lookup tables in Spark vs Spark Broadcast variables
我有两个数据集名称 dataset1
和 dataset2
和 dataset1
就像
empid empame
101 john
102 kevin
和dataset2
就像
empid empmarks empaddress
101 75 LA
102 69 NY
dataset2
将非常庞大,我需要对这两个数据集进行一些操作,并需要从以上两个 datasets
中获取结果。
据我所知,现在我有两种选择来处理这些数据集:
1.Store dataset1(尺寸较小)作为 hive 查找 table 并且必须处理他们通过 Spark
2.By 使用 Spark 广播变量 我们可以处理这些 dataset
.
任何人请告诉我哪个是更好的选择。
这应该是比提到的那 2 个选项更好的选项。
因为你有公共密钥,你可以进行内部连接。
dataset2.join(dataset1, Seq("empid"), "inner").show()
你也可以像这样使用broadcast
function/hint。这意味着你告诉框架小数据帧,即 dataset1 应该广播给每个执行者。
import org.apache.spark.sql.functions.broadcast
dataset2.join(broadcast(dataset1), Seq("empid"), "inner").show()
另请查看更多详情..
DataFrame join optimization - Broadcast Hash Join广播连接如何工作。
我有两个数据集名称 dataset1
和 dataset2
和 dataset1
就像
empid empame
101 john
102 kevin
和dataset2
就像
empid empmarks empaddress
101 75 LA
102 69 NY
dataset2
将非常庞大,我需要对这两个数据集进行一些操作,并需要从以上两个 datasets
中获取结果。
据我所知,现在我有两种选择来处理这些数据集:
1.Store dataset1(尺寸较小)作为 hive 查找 table 并且必须处理他们通过 Spark
2.By 使用 Spark 广播变量 我们可以处理这些 dataset
.
任何人请告诉我哪个是更好的选择。
这应该是比提到的那 2 个选项更好的选项。
因为你有公共密钥,你可以进行内部连接。
dataset2.join(dataset1, Seq("empid"), "inner").show()
你也可以像这样使用broadcast
function/hint。这意味着你告诉框架小数据帧,即 dataset1 应该广播给每个执行者。
import org.apache.spark.sql.functions.broadcast
dataset2.join(broadcast(dataset1), Seq("empid"), "inner").show()
另请查看更多详情..
DataFrame join optimization - Broadcast Hash Join广播连接如何工作。