PySpark Присоединиться после GroupBy - PullRequest
1 голос
/ 30 марта 2020

У меня есть два кадра данных, и я хотел бы присоединиться к ним по группам / разделам. Как я могу сделать это в PySpark?

Первый df содержит 3 временных ряда, идентифицированных идентификатором, отметкой времени и значением. Заметил, что временной ряд содержит некоторый разрыв (пропущенные дни)

enter image description here

Второй df содержит временной ряд без пропусков

enter image description here

Результат, которого я хочу достичь:

enter image description here

1 Ответ

0 голосов
/ 30 марта 2020

Left join на втором df с coalesce будет работать для этого случая.

Example:

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|
#+--------+----+-----+
...