Написание сложной функции внутри карты уменьшить Pyspark - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть такой 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 (веселье).Я подумал о лямбда-выражении, но не смог сформулировать искробезопасный код.

...