【发布时间】:2016-07-06 17:03:17
【问题描述】:
我正在尝试将数据框中的一行与下一行进行比较,以查看时间戳的差异。目前数据如下:
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 的回答是关于我不正确使用映射的信息,但是我使用的系统运行的是 2.02 之前的 Spark 版本,并且我正在处理 Cassandra 中的数据。
我设法用 mapPartitions 解决了这个问题。请参阅下面的答案。
更新(2017 年 3 月 27 日): 自从最初在这篇文章中标记答案以来,我对 Spark 的理解有了显着提高。我在下面更新了我的答案以显示我当前的解决方案。
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql pyspark-sql