【问题标题】:Is there a PySpark equivalent of Pandas TimeGrouper?是否有相当于 Pandas TimeGrouper 的 PySpark?
【发布时间】:2020-02-04 20:37:25
【问题描述】:

我在 Python Pandas 中有这段代码,数据框“df”包含“Connectivity_Tmstp”、“sensor_id”和“duration_seconds”列:

df.set_index('Connectivity_Tmstp', inplace=True)  
grouper_hour = df.groupby([pd.Grouper(freq='H'), 'sensor_id'])`  
result_stop_hour = grouper_hour['duration_seconds'].sum()`  
kpi_df = result_stop_hour.to_frame()`

此代码允许我将“Connectivity_Tmstp”列放入索引中,然后对小时数和传感器 ID 进行分组。最后,我可以将每个组的小时数相加,并将结果放入一个新的数据框中,如下所示:

Connectivity_Tmstp       |   sensor_id                |   duration_seconds          

2018-10-14 07:00:00      | 70b3d5e75e003fb7           |          60
                         | 70b3d5e75e004348           |          40
                         | 70b3d5e75e00435e           |          20
2018-11-02 07:00:00      | 70b3d5e75e0043b3           |          80
                         | 70b3d5e75e0043d7           |          10
                         | 70b3d5e75e0043da           |          60
2019-07-18 12:00:00      | 70b3d5e75e003fb8           |          40
                         | 70b3d5e75e00431c           |          10
                         | 70b3d5e75e0043c1           |          20
                         | 70b3d5e75e0043da           |          30 

你知道如何在 PySpark 中做同样的事情吗?

感谢您的回答。

问候, 棒棒哒

【问题讨论】:

    标签: python pandas pyspark timestamp


    【解决方案1】:

    是的。你可以使用Window函数:

    好资源:Databricks - Introducing Window functions in Spark-SQL

    如果您有一个细粒度的时间序列,并且希望将其重新采样为每小时一次:PySpark: how to resample frequencies

    from pyspark.sql.window import Window
    import pyspark.sql.functions as F
    
    w = Window().partitionBy("sensor_id").orderBy("Connectivity_Tmstp")
    
    df = df.withColumn('sum', F.sum(F.col('duration_seconds')).over(w))
    

    【讨论】:

    • 好的,谢谢,我会尝试使用窗口功能,我会告诉你它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2018-04-21
    • 2017-06-28
    • 2020-08-25
    • 2017-01-08
    相关资源
    最近更新 更多