首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用时间戳自加入pyspark数据格式

用时间戳自加入pyspark数据格式
EN

Stack Overflow用户
提问于 2018-03-27 08:42:43
回答 1查看 5.3K关注 0票数 3

我有一个火花数据,如下所示

代码语言:javascript
复制
+--+--------+-----------+
|id| account|       time|     
+--+--------+-----------+
| 4|      aa| 01/01/2017|    
| 2|      bb| 03/01/2017|    
| 6|      cc| 04/01/2017|    
| 1|      bb| 05/01/2017|      
| 5|      bb| 09/01/2017|    
| 3|      aa| 02/01/2017|
+--+--------+-----------+

我想得到如下数据

代码语言:javascript
复制
+---+---+-------+
|id1|id2|account|
+---+---+-------+
|  4|  3|     aa|
|  2|  5|     bb|
|  1|  5|     bb|
|  2|  1|     bb|
+---+---+-------+

因此,我需要在一个帐户中找到任何可能的对,id1将是具有较早时间的id,而id2将是稍后时间的id。我对火种很陌生,我觉得自己加入也许是个好的开始。

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-27 15:24:59

IIUC,您可以使用自连接来实现这一点:

代码语言:javascript
复制
import pyspark.sql.functions as f
df.alias('l').join(df.alias('r'), on='account')\
    .where('r.time > l.time')\
    .select(f.col('l.id').alias('id1'), f.col('r.id').alias('id2'), 'l.account')\
    .show()
#+---+---+-------+
#|id1|id2|account|
#+---+---+-------+
#|  1|  5|     bb|
#|  2|  1|     bb|
#|  2|  5|     bb|
#|  4|  3|     aa|
#+---+---+-------+
  • 将DataFrame (df)加入到account上的自身。(我们将左DataFrames和右'r'分别命名为'l''r'。)
  • 接下来,使用where进行筛选,只保留r.time > l.time所在的行。
  • 剩下的所有内容都是对应于同一id的一对l.id,其中l.id发生在r.id之前。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49508179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档