Можете ли вы придумать более простой способ достижения этого результата?
В этом случае я суммирую результаты для каждого идентификатора. Идея состоит в том, чтобы привести последнее значение и общее количество на пользователя.
Большое спасибо!
tmp= spark.createDataFrame(
[
(1, '2020-02-17',10),
(1, '2020-02-16',14),
(1, '2020-02-15',19),
(2, '2020-02-17',15),
(2, '2020-02-19',9),
],
['id','date','value']
)
tmp.createOrReplaceTempView('tmp_sql')
ver_sum = spark.sql("""
SELECT id,
value
FROM tmp_sql as t
WHERE NOT EXISTS (
SELECT *
FROM tmp_sql AS witness
WHERE witness.id = t.id AND witness.date > t.date
)
""")
ver_sum.createOrReplaceTempView('ver_sum_sql')
spark.sql(""" select a.id,
a.value as last_value,
sum(b.value) as tot_value
from ver_sum_sql a
join tmp_sql b on a.id = b.id
group by 1,2
""").show()
+---+----------+---------+
| id|last_value|tot_value|
+---+----------+---------+
| 1| 10| 43|
| 2| 9| 24|
+---+----------+---------+