- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有这样的数据集:
| item | event | timestamp | user |
|:-----------|------------:|:---------:|:---------:|
| titanic | view | 1 | 1 |
| titanic | add to bag | 2 | 1 |
| titanic | close | 3 | 1 |
| avatar | view | 6 | 1 |
| avatar | close | 10 | 1 |
| titanic | view | 20 | 1 |
| titanic | purchase | 30 | 1 |
等等。我需要为每个用户计算与特定项目相对应的连续事件的 sessionId。
因此对于特定的数据输出应该如下:
| item | event | timestamp | user | sessionId |
|:-----------|------------:|:---------:|:---------:|:--------------:|
| titanic | view | 1 | 1 | session1 |
| titanic | add to bag | 2 | 1 | session1 |
| titanic | close | 3 | 1 | session1 |
| avatar | view | 6 | 1 | session2 |
| avatar | close | 10 | 1 | session2 |
| titanic | view | 20 | 1 | session3 |
| titanic | purchase | 30 | 1 | session3 |
我尝试使用此处描述的类似方法 Spark: How to create a sessionId based on userId and timestamp带窗:
Window.partitionBy("user", "item").orderBy("timestamp")
但这行不通,因为同一个用户 - 项目组合可能在不同的 session 中。例如,请参阅 session1 和 session3。
通过该窗口,它们成为同一个 session 。需要有关如何实现的另一种方法的帮助。
最佳答案
这是一种方法,首先生成一列带有条件 null
的时间戳值,使用 last(ts, ignoreNulls)
和 rowsBetween
来回填最后一个非空时间戳值,最后使用dense_rank
构造sessionId
:
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window
val df = Seq(
("titanic", "view", 1, 1),
("titanic", "add to bag", 2, 1),
("titanic", "close", 3, 1),
("avatar", "view", 6, 1),
("avatar", "close", 10, 1),
("titanic", "view", 20, 1),
("titanic", "purchase", 30, 1)
).toDF("item", "event", "timestamp", "user")
val win1 = Window.partitionBy($"user").orderBy($"timestamp")
val win2 = Window.partitionBy($"user").orderBy($"sessTS")
df.
withColumn( "firstTS",
when( row_number.over(win1) === 1 || $"item" =!= lag($"item", 1).over(win1),
$"timestamp" )
).
withColumn( "sessTS",
last($"firstTS", ignoreNulls = true).
over(win1.rowsBetween(Window.unboundedPreceding, 0))
).
withColumn("sessionId", concat(lit("session"), dense_rank.over(win2))).
show
// +-------+----------+---------+----+-------+------+---------+
// | item| event|timestamp|user|firstTS|sessTS|sessionId|
// +-------+----------+---------+----+-------+------+---------+
// |titanic| view| 1| 1| 1| 1| session1|
// |titanic|add to bag| 2| 1| null| 1| session1|
// |titanic| close| 3| 1| null| 1| session1|
// | avatar| view| 6| 1| 6| 6| session2|
// | avatar| close| 10| 1| null| 6| session2|
// |titanic| view| 20| 1| 20| 20| session3|
// |titanic| purchase| 30| 1| null| 20| session3|
// +-------+----------+---------+----+-------+------+---------+
关于sql - Spark SQL : how to create sessionId for user-item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51575900/
我正在使用服务总线服务从azure发送消息,我想知道如果我不使用它,使用SessionId是否会比Case影响发送消息的速度。我知道 SessionId 会保留顺序,但是总体速度怎么样?谢谢 最佳答案
我正在使用服务总线服务从azure发送消息,我想知道如果我不使用它,使用SessionId是否会比Case影响发送消息的速度。我知道 SessionId 会保留顺序,但是总体速度怎么样?谢谢 最佳答案
通过使用给定的示例,我遇到了相应的问题。在示例中,通过首先重新加载 session 在 WebSocket 中使用它: socket.on('set value', function (val)
我有一个使用 application.cfc 的 ColdFusion 9 应用程序,它会像它应该的那样创建 session ,但是当我转储 session 时,有一个 cfid 和一个 cftoke
我正在尝试解决问题。用户使用 CAS SSO 登录到应用程序。该用户登录到另一个用户的帐户 - 通常是几秒钟前登录的用户帐户。有没有人知道为什么会发生这种情况以及如何解决? 我们确实采用了临时解决方法
我正在尝试从我的 SOAP API 响应 (XML) 中提取 sessionId。但是,无论我尝试什么,Python 仍然给我 sessionId 是空的(当我将响应打印为文本时它不是)。 我已经尝试
我一直在尝试 QuickFix,但收到“AttributeError:SessionID”。老实说,我不知道为什么会发生这种情况,我对代码做了一些修改,但问题仍然存在。另外,谷歌在这方面让我很失望,所
当使用 servlet api(如 JSF 或 JSP 页面)运行 java web 应用程序时,会在某处生成一个“唯一”的 SessionID 来标识用户的 session 。 我想知道这些 ses
这是我的 php 代码。 我得到了 Array ( [PHPSESSID] => vgojsl5kuuau35kpigsc5mepa3 ) 当我关闭浏览器并再次点击我的 php 文件时。我明白了。
我登录到 django 管理。当我打开 firebug JS 控制台并尝试使用 document.cookie 打印 cookie 时,我只得到 csrftoken cookie。但是当我打开 Fir
我想知道是否有人知道 ASP.NET SessionID 的格式是什么? 它不是 GUID 或 base64,它的类型是什么?它是否因 .NET 框架的版本而异? 谢谢 最佳答案 已编辑。从我原来的愚
我正在编写一个将对象存储在缓存中的 asp.net 应用程序。当页面第一次加载时,它会检查对象的缓存,如果存在,它将使用该对象。如果对象不存在,它将重新构建它并将其存储在缓存中。由于多个用户可以同时使
我正在编写一个使用 OAuth 的 Python/Django Web 应用程序(对于 TwitterAPI,这并不重要)。 我在我的登录函数中存储了一个 session ID,然后在使用 OAuth
有没有办法查看是否所有的浏览器窗口都关闭了?我看到如果您在 WebDriver 上调用 driver.quit() 或 driver.close(),sessionId 将变为 null。有办法检查吗
我在 IIS7 上部署了两个 Web 应用程序。 问题是,如果我使用相同的浏览器(不同的选项卡)请求两个应用程序,IIS 将生成相同的 Session.SessionID。 这会导致 ASP.Net
有没有办法查看是否所有的浏览器窗口都关闭了?我看到如果您在 WebDriver 上调用 driver.quit() 或 driver.close(),sessionId 将变为 null。有办法检查吗
我需要以编程方式从 Google Insights 下载 CSV 文件。由于它需要身份验证,我使用 clientLogin 来获取 session id。 如何通过将 session ID 作为 co
我正在尝试在微服务之间发出请求,以检索具有相同角色的用户列表。为此,我首先在微服务 1 内的前端和后端之间发出请求。接下来,我从微服务 1 后端调用微服务 2 中的端点,但其中丢失了 session
有什么方法可以配置(xml) tomcat (6.x) 来生成唯一的SessionId。(不扩展 ManagerBase/StandardManager)。 最佳答案 I am capturing u
我尝试在 Everyauth 的 .findOrCreateUser 上获取Express sessionID。 这个问题的背景: 基本上,我尝试集成 Socket.IO 和 Express,并阅读
我是一名优秀的程序员,十分优秀!