这是我在 PySpark 中的数据框:
utc_timestamp data feed
2015-10-13 11:00:00+00:00 1 A
2015-10-13 12:00:00+00:00 5 A
2015-10-13 13:00:00+00:00 6 A
2015-10-13 14:00:00+00:00 10 B
2015-10-13 15:00:00+00:00 11 B
的价值观data
是累积的。
我想得到这个结果(连续行之间的差异,按feed
):
utc_timestamp data feed
2015-10-13 11:00:00+00:00 1 A
2015-10-13 12:00:00+00:00 4 A
2015-10-13 13:00:00+00:00 1 A
2015-10-13 14:00:00+00:00 10 B
2015-10-13 15:00:00+00:00 1 B
In pandas
我会这样做:
df["data"] -= (df.groupby("feed")["data"].shift(fill_value=0))
我怎样才能在 PySpark 中做同样的事情?
您可以使用以下方法执行此操作lag https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.lag带窗口的函数:
from pyspark.sql.window import Window
import pyspark.sql.functions as f
window = Window.partitionBy("feed").orderBy("utc_timestamp")
df = df.withColumn("data", f.col("data") - f.lag(f.col("data"), 1, 0).over(window))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)