Я пытаюсь сравнить одну строку в кадре данных со следующей, чтобы увидеть разницу в метке времени. В настоящее время данные выглядит следующим образом:pyspark, Сравните две строки в dataframe
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
Я пытался отображение функции на dataframe, чтобы для сравнения, как это: (примечание: Я пытаюсь получить строки с разницей больше, чем 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
Что я считаю, из-за моей помощью функции карты неправильно. Помощь с использованием карты или другое решение будет оценено по достоинству.
UPDATE: @ zero323 в ответ был информативен на моем неправильном использовании отображения, однако система я использую под управлением версии Spark, прежде, чем 2,02, и я работаю с данными в Кассандре.
Мне удалось решить это с помощью mapPartitions. См. Мой ответ ниже.
UPDATE (2017/03/27): Поскольку первоначально маркировка ответ на этот пост мое понимание Спарк значительно улучшилось. Я обновил свой ответ ниже, чтобы показать свое текущее решение.
Нужно убедиться, что набор данных разделен на 'timestamp'. – ShuaiYuan
@ShuaiYuan вы правы. Я обновил свой ответ, чтобы показать свое текущее решение проблемы. – phelpsiv