Я пытаюсь сравнить одну строку в кадре данных со следующей, чтобы увидеть разницу в отметке времени. На данный момент данные выглядят так:
itemid | eventid | timestamp
----------------------------
134 | 30 | 2016-07-02 12:01:40
134 | 32 | 2016-07-02 12:21:23
125 | 30 | 2016-07-02 13:22:56
125 | 32 | 2016-07-02 13:27:07
Я попытался сопоставить функцию с фреймом данных, чтобы можно было сравнивать следующим образом: (примечание: я пытаюсь получить строки с разницей более 4 часов)
items = df.limit(10)\
.orderBy('itemid', desc('stamp'))\
.map(lambda x,y: (x.stamp - y.stamp) > 14400).collect()
Но я получаю следующую ошибку:
Py4JJavaError: An error occurred while calling
z:org.apache.spark.api.python.PythonRDD.collectAndServe
Я считаю, что это связано с тем, что я неправильно использую функцию карты. Будем признательны за помощь в использовании карты или другое решение.
ОБНОВЛЕНИЕ: ответ @zero323 был информативным относительно моего неправильного использования сопоставления, однако в системе, которую я использую, используется версия Spark до 2.02, и я работаю с данными в Cassandra.
Мне удалось решить это с помощью mapPartitions. Смотрите мой ответ ниже.
ОБНОВЛЕНИЕ (27.03.2017): С тех пор, как я изначально пометил ответ в этом сообщении, мое понимание Spark значительно улучшилось. Я обновил свой ответ ниже, чтобы показать мое текущее решение.