【发布时间】:2020-05-21 12:47:19
【问题描述】:
我是 pyspark 的新手。我通常和熊猫一起工作。我使用 pyspark 中的列逐行迭代。我的数据集如下所示:-
+-------------------+--------------------+--------+-----+
| DateTime| user_name|keyboard|mouse|
+-------------------+--------------------+--------+-----+
|2019-10-21 08:35:01|prathameshsalap@g...| 333.0|658.0|
|2019-10-21 08:35:01|vaishusawant143@g...| 447.5| 0.0|
|2019-10-21 08:35:01| you@example.com| 0.5| 1.0|
|2019-10-21 08:40:01| you@example.com| 0.0| 0.0|
|2019-10-21 08:40:01|prathameshsalap@g...| 227.0|366.0|
|2019-10-21 08:40:02|vaishusawant143@g...| 472.0| 0.0|
|2019-10-21 08:45:01| you@example.com| 0.0| 0.0|
|2019-10-21 08:45:01|prathameshsalap@g...| 35.0|458.0|
|2019-10-21 08:45:01|vaishusawant143@g...| 1659.5| 0.0|
|2019-10-21 08:50:01| you@example.com| 0.0| 0.0|
+-------------------+--------------------+--------+-----+
在 pandas 数据框中,它也有一个给定的索引,但在 spark 中没有。 在熊猫中:-
## pandas
usr_log = pd.read_csv("data.csv")
unique_users = usr_log.user_name.unique()
usr_log.sort_values(by='DateTime', inplace=True)
users_new_data = dict()
users_new_data[user] = {'start_time': None}
for user in unique_users:
count_idle = 0
## first part of the question
for index in usr_log.index:
if user == usr_log['user_name'][index]:
if users_new_data[user]['start_time'] is None:
users_new_data[user]['start_time'] = usr_log['DateTime'][index]
## Second part of the question
if usr_log['keyboard'][index] == 0 and usr_log['mouse'][index] == 0:
count_idle += 1
else:
count_idle = 0
if count_idle >= 5:
if count_idle == 5:
users_new_data[usr_log['user_name'][index]]['idle_time'] \
= users_new_data[usr_log['user_name'][index]].get('idle_time') \
+ datetime.timedelta(0, 1500)
else:
users_new_data[usr_log['user_name'][index]]['idle_time'] \
= users_new_data[usr_log['user_name'][index]].get('idle_time') \
+ datetime.timedelta(0, 300)
同样的事情如何在 spark 中做到这一点?
对于 5 分钟后生成的每个用户数据(例如,如果用户在 8:30:01 开始,则下一个日志在 8:35:01 生成)。在第二个问题中,我想为每个用户找到一个空闲时间。空闲时间的计算是如果他在接下来的 30 分钟(1500)内不移动鼠标或使用键盘,那么我添加用户空闲时间。
将字典值转换为数据框后,我的预期输出如下:-
+--------------------+-------------------+-------------------+
| user_name| start_time| idle_time|
+--------------------+-------------------+-------------------+
|prathameshsalap@g...|2019-10-21 08:35:01|2019-10-21 05:05:00|
|vaishusawant143@g...|2019-10-21 08:35:01|2019-10-21 02:15:00|
| you@example.com|2019-10-21 08:35:01|2019-10-21 01:30:00|
+--------------------+-------------------+-------------------+
【问题讨论】:
-
你能发布你的预期输出吗?
-
你能再检查一遍吗? @AjayKharade
-
这里一头雾水,无法关联输入输出数据集?
-
您有什么不明白的请澄清一下?在这里,按日期时间排序后,如果开始时间为无,我会找到每个用户的开始时间。我希望你明白了。 @AjayKharade
-
现在,我可以关联输入和输出了,谢谢。我已经发布了相同的解决方案。
标签: python apache-spark pyspark apache-spark-sql