【发布时间】:2020-11-20 03:43:31
【问题描述】:
我是 PySpark 的新手。
我正在尝试执行 GroupBy 操作以获取聚合计数。但我无法根据时间频率执行 groupBy 。我需要使用“CAPTUREDTIME、NODE、CHANNEL、LOCATION、TACK”字段执行“groupBy”。但是在这个 groupBy 中,我应该使用“CAPTUREDTIME”字段根据“hourly”、“daily”、“weekly”、“monthly”进行分组。
请找到以下示例数据。
-----------------+------+------+--------+----------+--------------
|CAPTUREDTIME| NODE| CHANNEL | LOCATION| TACK
+-----------------+------+------+--------+----------+-------------
|20-05-09 03:06:21| PUSC_RES| SIMPLEX| NORTH_AL| UE220034
|20-05-09 04:33:04| PUSC_RES| SIMPLEX| SOUTH_AL| UE220034
|20-05-09 12:04:52| TESC_RES| SIMPLEX| NORTH_AL| UE220057
|20-05-10 04:24:09| TESC_RES| SIMPLEX| NORTH_AL| UE220057
|20-05-10 04:33:04| PUSC_RES| SIMPLEX| SOUTH_AL| UE220034
|20-04-09 10:57:48| TESC_RES| SIMPLEX| NORTH_AL| UE220057
|20-04-09 12:12:26| TESC_RES| SIMPLEX| NORTH_AL| UE220057
|20-04-09 03:26:33| PUSC_RES| SIMPLEX| NORTH_AL| UE220071
+-----------------+------+------+--------+----------+-------------
我使用了下面的 pyspark 代码
df = df.groupby("CAPTUREDTIME", "NODE", "CHANNEL", "LOCATION", "TACK").agg(
func.count("TACK").alias("count")
)
如何将上述代码扩展到“每小时”、“每天”、“每周”、“每月”分组?
我需要以下格式的输出(共享示例输出):
每小时:
|捕获时间|节点|频道 |位置|大头钉|计数
|20-05-09 03:00:00| PUSC_RES|简单| NORTH_AL| UE220034| 2
|20-05-09 04:00:00| PUSC_RES|简单|南_阿尔| UE220034| 2
每天:
|捕获时间|节点|频道 |位置|大头钉|计数
|20-05-09 00:00:00| PUSC_RES|简单| NORTH_AL| UE220034| 1
|20-05-09 00:00:00| PUSC_RES|简单|南_阿尔| UE220034| 2
|20-05-09 00:00:00| TESC_RES|简单| NORTH_AL| UE220057| 3
每周:
|捕获时间|节点|频道 |位置|大头钉|计数
|20-05-09 00:00:00| PUSC_RES|简单| NORTH_AL| UE220034| 1
每月:
|捕获时间|节点|频道 |位置|大头钉|计数
|20-05-09 00:00:00| PUSC_RES|简单| NORTH_AL| UE220034| 1
【问题讨论】:
-
您需要从您的日期时间列中创建您想要的列,即“hourly”、“daily”、“weekly”、“monthly”,然后分组
-
@LarsSkaug:该链接说明了如何拆分字段。在这里,我需要对现有字段执行 groupby。它没有解决这个问题
-
预期的答案是什么?能否请您以表格格式分享以便更好地理解
标签: pyspark apache-spark-sql pyspark-dataframes