聚集在pyspark的5分钟窗口

时间:2016-10-31 11:24:20

标签: python pandas pyspark pyspark-sql

我有以下数据框class Molecule attr_reader :num, :bond @@nums = { 1 => 'met', 2 => 'et', 3=> 'prop', 4 => 'but'} @@bonds = {1 => 'ano', 2 => 'eno', 3 => 'ino'} def initialize(num_id, bond_id) @num = @@nums[num_id] @bond = @@bonds[bond_id] end def name "#{num}, #{bond}" end end a = Molecule.new(2,1) puts a.name

df

我想有效地使用pyspark来聚合超过5分钟的时间窗口并进行一些计算 - 例如计算平均数量&每5分钟时间窗口每次使用的长度 - df将如下所示:

User | Datetime         | amount | length
A    | 2016-01-01 12:01 | 10     | 20
A    | 2016-01-01 12:03 | 6      | 10
A    | 2016-01-01 12:05 | 1      | 3
A    | 2016-01-01 12:06 | 3      | 5
B    | 2016-01-01 12:01 | 10     | 20
B    | 2016-01-01 12:02 | 8      | 20

如何以最有效的方式实现这一目标? 在我使用的熊猫中:

User | Datetime         | amount | length
A    | 2016-01-01 12:00 | 8      | 15
B    | 2016-01-01 12:00 | 2      | 4
A    | 2016-01-01 12:05 | 9      | 20

1 个答案:

答案 0 :(得分:0)

不幸的是,在pyspark这看起来不像熊猫那么酷;-) 您可以尝试将日期转换为时间戳并使用模数,例如:

import pyspark.sql.functions as F
seconds = 300
seconds_window = F.from_unixtime(F.unix_timestamp('date') - F.unix_timestamp('date') % seconds)
dataframe.withColumn('5_minutes_window', seconds_window)

然后,您只需按新列分组并执行请求的聚合。