Apache spark Spark如何仅在分区内连接
我有两个大数据帧。每行都有lat/lon数据。我的目标是在两个数据帧之间进行连接,并找到距离内的所有点,例如100米Apache spark Spark如何仅在分区内连接,apache-spark,apache-spark-sql,partitioning,Apache Spark,Apache Spark Sql,Partitioning,我有两个大数据帧。每行都有lat/lon数据。我的目标是在两个数据帧之间进行连接,并找到距离内的所有点,例如100米 df1: (id, lat, lon, geohash7) df2: (id, lat, lon, geohash7) 我想在geohash7上对df1和df2进行分区,然后只在分区内进行连接。我希望避免分区之间的连接以减少计算量 df1 = df1.repartition(200, "geohash7") df2 = df2.repartition(200
df1: (id, lat, lon, geohash7)
df2: (id, lat, lon, geohash7)
我想在geohash7上对df1和df2进行分区,然后只在分区内进行连接。我希望避免分区之间的连接以减少计算量
df1 = df1.repartition(200, "geohash7")
df2 = df2.repartition(200, "geohash7")
df_merged = df1.join(df2, (df1("geohash7")===df2("geohash7")) & (dist(df1("lat"),df1("lon"),df2("lat"),df2("lon"))<100) )
df1=df1.重新分区(200,“geohash7”)
df2=df2.重新划分(200,“geohash7”)
join(df2,(df1(“geohash7”)==df2(“geohash7”))和dist(df1(“lat”)、df1(“lon”)、df2(“lat”)、df2(“lon”)在大量处理数据之后,spark似乎足够聪明,可以首先确保在相等条件(“geohash7”)下进行连接。因此,如果没有匹配,它将不会计算“dist”函数。
同样,在相等条件下,它似乎不再进行交叉连接。因此,我不必做任何其他事情。上面的连接工作正常。您是否通过.explain()检查了计划
?我不明白代码将执行交叉连接
。dist
在做什么?我是正确的,它是一个udf,用于计算两点之间的欧几里德距离?这将由交叉连接计算两点之间的哈弗斯线距离。是的,spark似乎不支持我想要的。在som之后我认为spark并没有进行交叉连接,因为join语句中有geohash-7条件。如果我删除geohash-7匹配条件,查询运行会慢得多。