我有一个起点和目的地列表以及它们的地理坐标。我需要计算每个起点到目的地的最小距离。
下面是我的代码:
import pyspark.sql.functions as F
from haversine import haversine_vector,Unit
data1 = [("A",(45.7597,4.8422)),("B",(46.7431,5.8422))]
columns1 = ["Origin","Origin_Geo"]
df1 = spark.createDataFrame(data=data1,schema=columns1)
data2 = [("Destin1",(48.8567,2.3508)),("Destin2",(40.7033962,-74.2351462))]
columns2 = ["Destination","Destination_Geo"]
df2 = spark.createDataFrame(data=data2,schema=columns2)
df = df1.crossJoin(df2)
df.withColumn(
"Distance",haversine_vector(F.col("Origin_Geo"),F.col("Destination_Geo"))
).groupBy("Origin").agg(F.min("Distance").alias("Min_Distance")).show()
我收到如下错误:
IndexError: too many indices for array: array is 0-dimensional,but 2 were indexed
我的问题是:
-
看来
withColumn('Distance',haversine_vector(F.col('Origin_Geo'),F.col('Destination_Geo')))
有问题。我不知道为什么。 (我是 pyspark 的新手..) -
我有一长串起点和目的地(均超过 3 万个)。交叉连接会生成大量的起点和终点组合。我想知道是否有更有效的方法来获得最小距离?
非常感谢。