首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PySpark中操作复杂的数据帧

在PySpark中操作复杂的数据帧
EN

Stack Overflow用户
提问于 2021-01-10 01:50:51
回答 1查看 40关注 0票数 1

我正在准备一个使用PySpark训练机器学习模型的数据集。我正在处理的数据帧包含数千条关于不同建筑和城市不同房间内不同日期登记的存在的记录。这些表示形式如下:

代码语言:javascript
复制
+----+----+----+---+---------+------+--------+-------+---------+
|room|building|city|day|month|inHour|inMinute|outHour|outMinute|
+----+--------+----+---+-----+------+--------+-------+---------+
|   1|       1|   1|  9|   11|     8|      27|     13|       15|
|   1|       1|   1|  9|   11|     8|      28|     13|        5|
|   1|       1|   1|  9|   11|     8|      32|     13|        7|
|   1|       1|   1|  9|   11|     8|      32|      8|       50|
|   1|       1|   1|  9|   11|     8|      32|      8|       48|
+----+--------+----+---+-----+------+--------+-------+---------+

inHour和inMinute表示访问的小时和分钟,当然,outHour和outMinute表示退出的时间。小时数以0-23的格式考虑。所有列都只包含整数值。

我缺少的是我的机器学习模型的目标值,即房间、建筑物、城市、日、月和时间间隔的组合的人数。我将尝试更好地解释,第一行表示访问时间为8,退出时间为13的存在,因此它应该被计入间隔为8-9,9-10,10-11,11-12和13-14的记录中。我想要实现的内容如下:

代码语言:javascript
复制
+----+----+----+---+---------+------+-------+-----+
|room|building|city|day|month|timeIn|timeOut|count|
+----+--------+----+---+-----+------+-------+-----+
|   1|       1|   1|  9|   11|     8|      9|    X|   
|   1|       1|   1|  9|   11|     9|     10|    X|  
|   1|       1|   1|  9|   11|    10|     11|    X|   
|   1|       1|   1|  9|   11|    11|     12|    X|   
|   1|       1|   1|  9|   11|    12|     13|    X|     
+----+--------+----+---+-----+------+-------+-----+

所以第一个表的第四行应该计入这个表的第一行,依此类推…

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-10 01:58:06

您可以分解一系列小时(例如,第一行将具有[8,9,10,11,12,13]),按小时分组(以及其他列),并获得每个组的聚合计数。这里的hour指的是timeIn。我认为没有必要在结果数据帧中指定timeOut,因为它总是timeIn + 1。

代码语言:javascript
复制
import pyspark.sql.functions as F

df2 = df.withColumn(
    'hour',
    F.explode(F.sequence('inHour', 'outHour'))
).groupBy(
    'room', 'building', 'city', 'day', 'month', 'hour'
).count().orderBy('hour')

df2.show()
+----+--------+----+---+-----+----+-----+
|room|building|city|day|month|hour|count|
+----+--------+----+---+-----+----+-----+
|   1|       1|   1|  9|   11|   8|    5|
|   1|       1|   1|  9|   11|   9|    3|
|   1|       1|   1|  9|   11|  10|    3|
|   1|       1|   1|  9|   11|  11|    3|
|   1|       1|   1|  9|   11|  12|    3|
|   1|       1|   1|  9|   11|  13|    3|
+----+--------+----+---+-----+----+-----+
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65645790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档