我有两个数据框,我想做的是按组/分区加入它们。我如何在 PySpark 中执行此操作?
第一个 df 包含 3 个时间序列,由一个 id、一个时间戳和一个值标识。注意到时间序列包含一些间隙(缺失天数)
第二个 df 包含一个没有间隙的时间序列
我想要达到的结果是
最佳答案
Left join
在第二个 df 上使用 coalesce
将适用于这种情况。
示例:
df.show()
#---+--------+-----+
#tag| ts|value|
#---+--------+-----+
# a|01-01-19| 45|
# a|03-01-19| 89|
# a|04-01-19| 24|
# a|05-01-19| 778|
#---+--------+-----+
df1.show()
#+--------+
#| ts|
#+--------+
#|01-01-19|
#|02-01-19|
#|03-01-19|
#|04-01-19|
#|05-01-19|
#+--------+
df1.alias("t1").join(df.alias("t2"),col("t1.ts")==col("t2.ts"),"left").\
selectExpr("coalesce(t1.ts,t2.ts) as ts","tag","value").\
orderBy("ts").\
show()
#+--------+----+-----+
#| ts| tag|value|
#+--------+----+-----+
#|01-01-19| a| 45|
#|02-01-19|null| null|
#|03-01-19| a| 89|
#|04-01-19| a| 24|
#|05-01-19| a| 778|
#+--------+----+-----+
关于python - PySpark 在 GroupBy 之后加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60933697/