У меня есть такой CSV-файл с данными (большой файл> 20 ГБ), как показано ниже:
ObjectID,Lon,Lat,Speed,GPSTime
182163,116.367520,40.024680,29.00,2016-07-04 09:01:09.000
116416,116.694693,39.785382,0.00,2016-07-04 09:01:17.000
Используя pyspark (rdd, map и Reduce), я хочу обрабатывать географические данные и проверять каждыйстрока, если Latitude, Longitude находится внутри многоугольника, а затем записать строку в выходной файл.
Это исходный код без использования искры.
polygon = Polygon(data['features'][cityIdx]['geometry']['coordinates'][0])
with open(outFileName, 'w', newline='') as outfile:
writer = csv.writer(outfile)
for chunk in pd.read_csv(inFileName,chunksize=chunksize,sep=','):
ObjectIDs = list(chunk['ObjectID'])
Lons = list(chunk['Lon'])
Lats = list(chunk['Lat'])
Speeds = list(chunk['Speed'])
Directs = list(chunk['Direct'])
Mileages = list(chunk['Mileage'])
GPSTimes = list(chunk['GPSTime'])
for ObjectID,Lon,Lat,Speed,Direct,Mileage,GPSTime in zip(ObjectIDs,Lons,Lats,Speeds,Directs,Mileages,GPSTimes):
point = Point(Lon, Lat)
if(polygon.contains(point)):
writer.writerow([ObjectID,Lon,Lat,Speed,Direct,Mileage,GPSTime])
Как мне это сделать?используя .rdd.map (веселье) .reduce (веселье).Я подумал о лямбда-выражении, но не смог сформулировать искробезопасный код.