Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark如何仅在分区内连接_Apache Spark_Apache Spark Sql_Partitioning - Fatal编程技术网

Apache spark Spark如何仅在分区内连接

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

我有两个大数据帧。每行都有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, "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匹配条件,查询运行会慢得多。