我是Pyspark的新手。我在下面的两张表中有这样的数据。我正在使用数据帧。
表1:
Id | 金额 | 日期|
---|---|---|
1 | £100 | 2021年4月1日|
1 | £50 | 2021年4月8日 |
2 | £60 | 2021年4月2日[/tr>|
2 | 20英镑 | 2021年5月6日
在Id
和Date
上使用完全联接,然后使用lag
窗口函数从前一个最接近的Date
行获取Status
和Amount
的值:
from pyspark.sql import Window
import pyspark.sql.functions as F
w = Window.partitionBy("Id").orderBy(F.to_date("Date", "dd/MM/yyyy"))
joined_df = df1.join(df2, ["Id", "Date"], "full").withColumn(
"Status",
F.coalesce(F.col("Status"), F.lag("Status").over(w))
).withColumn(
"Amount",
F.coalesce(F.col("Amount"), F.lag("Amount").over(w))
)
joined_df.show()
#+---+----------+------+------+
#| Id| Date|Amount|Status|
#+---+----------+------+------+
#| 1|01/04/2021| £100| S1|
#| 1|05/04/2021| £100| S2|
#| 1|08/04/2021| £50| S2|
#| 1|10/04/2021| £50| S3|
#| 2|02/04/2021| £60| S1|
#| 2|10/04/2021| £60| S2|
#| 2|06/05/2021| £20| S2|
#+---+----------+------+------+