在PySpark中插值lat/lon列以获得轨迹中的等间距点

在PySpark中插值lat/lon列以获得轨迹中的等间距点,pyspark,interpolation,shapely,Pyspark,Interpolation,Shapely,我有一个PySpark数据框,其中包含由“trajectories_id”列标识的不同轨迹的Lat/Lon点。每个轨迹由不同数量的点组成。 下面是一个非常简单的例子。注意,在我的例子中,我可以有更复杂(非直线)的线 轨迹id 纬度 经度 1. 45 5. 1. 45 6. 1. 45 9 2. 46 1. 2. 46 5. 通过使用UDF生成一系列整数,我可以生成您期望的数据。它将在lat和lon的范围内工作(您的样本仅显示lon的范围) def nums(f,t): 返回列表(范围(f、t+1

我有一个PySpark数据框,其中包含由“trajectories_id”列标识的不同轨迹的Lat/Lon点。每个轨迹由不同数量的点组成。 下面是一个非常简单的例子。注意,在我的例子中,我可以有更复杂(非直线)的线

轨迹id 纬度 经度 1. 45 5. 1. 45 6. 1. 45 9 2. 46 1. 2. 46 5.
通过使用UDF生成一系列整数,我可以生成您期望的数据。它将在lat和lon的范围内工作(您的样本仅显示lon的范围)

def nums(f,t):
返回列表(范围(f、t+1))
(df)
.groupBy('tracept_id')#按'tracept_id'分组以获得最小最大lat和lon
阿格先生(
F.min('lat')。别名('min_lat'),
F.max('lat')。别名('max_lat'),
F.min('lon')。别名('min_-lon'),
F.max('lon')。别名('max_-lon'),
)
.withColumn('lat_-arr',F.udf(nums,T.ArrayType(T.IntegerType()))('min_-lat','max_-lat'))#使用udf根据min-max-lat生成lat值列表
.withColumn('lon_arr',F.udf(nums,T.ArrayType(T.IntegerType()))('min_lon','max_lon'))#使用udf根据min-max lon生成lon值列表
.withColumn('lat',F.explode('lat_arr'))#将lat值分解为多行
.withColumn('lon',F.explode('lon_arr'))#将lon值分解为多行
.drop('min_-lat','max_-lat','min_-lon','max_-lon','lat_-arr','lon_-arr')#drop临时柱
.show()
)
# +-------------+---+---+
#|轨迹| id | lat | lon|
# +-------------+---+---+
# |            1| 45|  5|
# |            1| 45|  6|
# |            1| 45|  7|
# |            1| 45|  8|
# |            1| 45|  9|
# |            2| 46|  1|
# |            2| 46|  2|
# |            2| 46|  3|
# |            2| 46|  4|
# |            2| 46|  5|
# +-------------+---+---+