Spark:加入两个数据帧的速度更快?

时间:2017-08-31 07:25:27

标签: scala apache-spark

我有两个数据框df1ip2Countrydf1包含IP地址,我正在尝试将IP地址映射到经度纬度这些列中的地理位置信息ip2Country

我将它作为Spark提交作业运行,但即使df1只有少于2500行,操作也需要很长时间。

我的代码:

val agg =df1.join(ip2Country, ip2Country("network_start_int")=df1("sint")
, "inner")
.select($"src_ip"
,$"country_name".alias("scountry")
,$"iso_3".alias("scode")
,$"longitude".alias("slong")
,$"latitude".alias("slat")
,$"dst_ip",$"dint",$"count")
.filter($"slong".isNotNull)

val agg1 =agg.join(ip2Country, ip2Country("network_start_int")=agg("dint")
, "inner")
.select($"src_ip",$"scountry"
,$"scode",$"slong"
,$"slat",$"dst_ip"
,$"country_name".alias("dcountry")
,$"iso_3".alias("dcode")
,$"longitude".alias("dlong")
,$"latitude".alias("dlat"),$"count")
.filter($"dlong".isNotNull)

还有其他方法加入这两张桌子吗?或者我做错了吗?

1 个答案:

答案 0 :(得分:10)

如果你有一个需要加入小数据的大数据帧 - 广播连接非常有效。请在此处阅读:Broadcast Joins (aka Map-Side Joins)

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>