我有一个火花数据,如下所示
+--+--------+-----------+
|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|
+--+--------+-----------+我想得到如下数据
+---+---+-------+
|id1|id2|account|
+---+---+-------+
| 4| 3| aa|
| 2| 5| bb|
| 1| 5| bb|
| 2| 1| bb|
+---+---+-------+因此,我需要在一个帐户中找到任何可能的对,id1将是具有较早时间的id,而id2将是稍后时间的id。我对火种很陌生,我觉得自己加入也许是个好的开始。
有人能帮我吗?
发布于 2018-03-27 15:24:59
IIUC,您可以使用自连接来实现这一点:
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|
#+---+---+-------+df)加入到account上的自身。(我们将左DataFrames和右'r'分别命名为'l'和'r'。)where进行筛选,只保留r.time > l.time所在的行。id的一对l.id,其中l.id发生在r.id之前。https://stackoverflow.com/questions/49508179
复制相似问题