我有兩個 Sparks 資料框:
df1每個id和一個條目date:
|date |id |
----------- -----
|2021-11-15 | 1|
|2021-11-14 | 1|
|2021-11-15 | 2|
|2021-11-14 | 2|
|2021-11-15 | 3|
|2021-11-14 | 3|
df2 有多個日志條目:
|date |id |
----------- -----
|2021-11-13 | 1|
|2021-11-13 | 1|
|2021-11-13 | 3|
|2021-11-14 | 1|
|2021-11-14 | 1|
|2021-11-14 | 1|
|2021-11-14 | 1|
|2021-11-15 | 1|
|2021-11-15 | 1|
我怎樣才能加入這些 dfs,以便我獲得最新的可能條目(日期(df2)應該是 <= 日期) per idand dateof df2?
|date |id | date(df2)|
----------- ------ ------------
|2021-11-15 | 1 | 2021-11-15 |
|2021-11-14 | 1 | 2021-11-14 |
|2021-11-15 | 2 | null |
|2021-11-14 | 2 | null |
|2021-11-15 | 3 | 2021-11-13 |
|2021-11-14 | 3 | 2021-11-13 |
THX 轉換成數字
uj5u.com熱心網友回復:
使用 join 然后 group by df1.idanddf2.date并使用條件聚合來獲得最大值df2.date <= df1.date
import pyspark.sql.functions as F
result_df = df1.join(
df2.withColumnRenamed("date", "df2_date"),
["id"],
"left"
).groupBy("id", "date").agg(
F.max(
F.when(F.col("df2_date") <= F.col("date"), F.col("df2_date"))
).alias("df2_date")
)
result_df.show()
# --- ---------- ----------
#| id| date| df2_date|
# --- ---------- ----------
#| 1|2021-11-14|2021-11-14|
#| 1|2021-11-15|2021-11-15|
#| 2|2021-11-14| null|
#| 2|2021-11-15| null|
#| 3|2021-11-14|2021-11-13|
#| 3|2021-11-15|2021-11-13|
# --- ---------- ----------
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360762.html
上一篇:如何在Databricks上讀取PySpark中的json檔案時跳過/忽略重復列。將運行時從7.3LTS(Spark3.0.1)升級到9.1LTS(Spark3.1.2)
