我有两个数据框df1
和ip2Country
。
df1
包含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)
还有其他方法加入这两张桌子吗?或者我做错了吗?
答案 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>