Spark数据帧中具有特定条件的时间戳的唯一ID

诺达

我有一个由这两列组成的spark数据框,我想根据时间戳列上的简单条件为每一行提供一个ID。对于每个用户,如果下一个和上一个时间戳之间的差小于10秒,我将继续附加相同的ID,否则我将更新该ID并继续进行,直到为每行分配一个ID。
自从我使用pyspark以来,所有内容都应该用python编码。
为了使事情更容易理解,这里有一个例子:

启动DF

    +------------------+
    |   User| timestamp|
    +------------------+
    |  user0|     100  |
    |  user1|     102  |
    |  user0|     109  |
    |  user2|     103  |
    |  user1|     108  |
    |  user0|     119  |
    |  user0|     140  |
    |  user0|     142  |
    +------------------+

所需的DF是这样的

    +----------------------+
    |   User| timestamp| ID|
    +----------------------+
    |  user0|     100  |  1|
    |  user1|     102  |  2|
    |  user0|     109  |  1|
    |  user2|     103  |  3|
    |  user1|     108  |  2|
    |  user0|     119  |  1|
    |  user0|     140  |  4|
    |  user0|     142  |  4|
    +----------------------+

或者如果alghoritm在给定用户的ID之前分配,则可能是类似的事情,我并不在乎,也可以

    +----------------------+
    |   User| timestamp| ID|
    +----------------------+
    |  user0|     100  |  1|
    |  user1|     102  |  3|
    |  user0|     109  |  1|
    |  user2|     103  |  4|
    |  user1|     108  |  3|
    |  user0|     119  |  1|
    |  user0|     140  |  2|
    |  user0|     142  |  2|
    +----------------------+

如您所见,时间戳为140的user0具有不同的ID(2),因为与前一个时间戳的差大于10。

如果我可以循环并动态分配每个单元格,这将很容易,但是它违反了使用spark数据帧的目的,而且我认为由于它们是不可变的,因此无法实现。

在Spark中最有效的方法是什么?提前致谢!

麦克

您可以首先为每个用户生成一个ID,然后按如下所示将它们组合到不同的用户中。

import pyspark.sql.functions as F
from pyspark.sql.window import Window

w = Window.partitionBy('User').orderBy('timestamp')

df2 = df.withColumn(
    'begin',
    F.coalesce(
        F.col('timestamp') - F.lag('timestamp').over(w) > 10, 
        F.lit(True)
    ).cast('int')
).withColumn(
    'userid',
    F.sum('begin').over(w.rowsBetween(Window.unboundedPreceding, 0))
).withColumn(
    'ID',
    F.dense_rank().over(Window.orderBy('userid', 'User'))
)

# If you just want to keep your columns, do:
# df2 = df2.select('User', 'timestamp', 'ID')

df2.show()
+-----+---------+-----+------+---+
| User|timestamp|begin|userid| ID|
+-----+---------+-----+------+---+
|user0|      100|    1|     1|  1|
|user0|      109|    0|     1|  1|
|user0|      119|    0|     1|  1|
|user1|      102|    1|     1|  2|
|user1|      108|    0|     1|  2|
|user2|      103|    1|     1|  3|
|user0|      140|    1|     2|  4|
|user0|      142|    0|     2|  4|
+-----+---------+-----+------+---+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

大熊猫从具有特定条件的数据帧(分组)中删除重复项

来自分类Dev

通过唯一的聚合并在熊猫中具有特定条件进行分组

来自分类Dev

通过具有多个时间戳的唯一 ID 获取最新的表条目

来自分类Dev

根据特定条件分割数据帧

来自分类Dev

熊猫数据框比较具有特定条件的多行

来自分类Dev

合并或映射具有唯一列名或在特定条件下的DataFrame

来自分类Dev

根据特定条件修改 Spark 数据框中的列

来自分类Dev

Spark:在数据帧的同一列中解析具有不同格式(MM-dd-yyyy HH:mm,MM / dd / yy H:mm)的日期/时间戳

来自分类Dev

选择中具有特定条件的总和

来自分类Dev

在R中删除具有特定条件的行

来自分类Dev

在 Access 中查找具有特定条件的最新记录

来自分类Dev

每天满足特定条件的时间后将数据帧设置为true

来自分类Dev

将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

来自分类Dev

将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

来自分类Dev

如何在php和mysqli中查看具有特定条件的特定用户的数据库中的记录

来自分类Dev

如何计算和获取 Spark 数据帧中唯一 ID 的总和?

来自分类Dev

计算具有特定条件的变量

来自分类Dev

具有特定条件的AngularJS过滤

来自分类Dev

具有特定条件的 MongoDB find()

来自分类Dev

合并具有非唯一列的数据帧

来自分类Dev

如果行与另一个DataFrame中的ID匹配且时间戳低于其他帧时间戳,则如何过滤Scala Spark DataFrame

来自分类Dev

时间戳作为唯一 ID

来自分类Dev

使用具有特定条件的另一个表中的值更新Oracle中的表

来自分类Dev

子集匹配特定条件的列表中的多个数据帧

来自分类Dev

根据另一个数据帧的“时间戳”和“id”从一个数据帧中获取最大数量

来自分类Dev

R:根据特定条件聚合数据帧

来自分类Dev

熊猫数据帧中的时间戳

来自分类Dev

在 SQL 中的多行中选择具有或不具有特定条件的组

来自分类Dev

仅针对XSL 1.0中的特定条件列出组内属性的唯一值

Related 相关文章

  1. 1

    大熊猫从具有特定条件的数据帧(分组)中删除重复项

  2. 2

    通过唯一的聚合并在熊猫中具有特定条件进行分组

  3. 3

    通过具有多个时间戳的唯一 ID 获取最新的表条目

  4. 4

    根据特定条件分割数据帧

  5. 5

    熊猫数据框比较具有特定条件的多行

  6. 6

    合并或映射具有唯一列名或在特定条件下的DataFrame

  7. 7

    根据特定条件修改 Spark 数据框中的列

  8. 8

    Spark:在数据帧的同一列中解析具有不同格式(MM-dd-yyyy HH:mm,MM / dd / yy H:mm)的日期/时间戳

  9. 9

    选择中具有特定条件的总和

  10. 10

    在R中删除具有特定条件的行

  11. 11

    在 Access 中查找具有特定条件的最新记录

  12. 12

    每天满足特定条件的时间后将数据帧设置为true

  13. 13

    将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

  14. 14

    将具有奇异时间戳的数据帧转换为具有熊猫的时间序列

  15. 15

    如何在php和mysqli中查看具有特定条件的特定用户的数据库中的记录

  16. 16

    如何计算和获取 Spark 数据帧中唯一 ID 的总和?

  17. 17

    计算具有特定条件的变量

  18. 18

    具有特定条件的AngularJS过滤

  19. 19

    具有特定条件的 MongoDB find()

  20. 20

    合并具有非唯一列的数据帧

  21. 21

    如果行与另一个DataFrame中的ID匹配且时间戳低于其他帧时间戳,则如何过滤Scala Spark DataFrame

  22. 22

    时间戳作为唯一 ID

  23. 23

    使用具有特定条件的另一个表中的值更新Oracle中的表

  24. 24

    子集匹配特定条件的列表中的多个数据帧

  25. 25

    根据另一个数据帧的“时间戳”和“id”从一个数据帧中获取最大数量

  26. 26

    R:根据特定条件聚合数据帧

  27. 27

    熊猫数据帧中的时间戳

  28. 28

    在 SQL 中的多行中选择具有或不具有特定条件的组

  29. 29

    仅针对XSL 1.0中的特定条件列出组内属性的唯一值

热门标签

归档