我有两个存储的文件:
IP存储为整数(使用inet_aton()).
我尝试通过将两个文件加载到数据框并将它们注册为临时表来使用Spark SQL来连接这些数据.
GeoLocTable - ipstart, ipend, ...additional Geo location data
Recordstable - INET_ATON, ...3 more fields
Run Code Online (Sandbox Code Playgroud)
我尝试使用Spark SQL来使用像这样的SQL语句来连接这些数据 -
"select a.*, b.* from Recordstable a left join GeoLocTable b on a.INET_ATON between b.ipstart and b.ipend"
Run Code Online (Sandbox Code Playgroud)
RecordsTable中有大约850K记录,GeoLocTable中有大约250M记录.存在的连接大约有20个执行器运行大约2个小时.
我尝试过缓存和播放GeoLocTable,但它似乎并没有帮助.我已经碰到了spark.sql.autoBroadcastJoinThreshold = 300000000和spark.sql.shuffle.partitions = 600.
Spark UI显示正在执行的BroadcastNestedLoopJoin.这是我应该期待的最好的吗?我尝试搜索将执行此类连接的条件,但文档似乎很少.
PS - 我正在使用PySpark与Spark合作.