当前位置: 首页 > 知识库问答 >
问题:

用Kinesis分析法构建实时会话

隗轶
2023-03-14

2)第二个例子是一个流,它在会话结束后(即5分钟后没有来自用户的数据)为每个会话输出一个事件。这个事件有userId、start_timestamp、end_timestamp和event_count

这在运动分析中是可能的吗?

下面是一个使用Apache Spark进行此操作的示例:https://docs.cloud.databricks.com/docs/latest/databricks_guide/07%20spark%20streaming/applications/01%20sessionization.html

共有1个答案

钱弘壮
2023-03-14

您可以通过创建以下逻辑使用Drools来完成此操作:

类型:

package com.test;

import java.util.List;

declare EventA
    @role( event )
    userId:String;
    seen:boolean;
end

declare SessionStart
    userId: String;
    timestamp: long;
    events: List;
end

declare SessionEnd
    userId: String;
    timestamp: long;
    numOfEvents: int;
end

declare SessionNotification
    userId: String;
    currentNumOfEvents: int;
end

规则:

package com.test;

import java.util.List;
import java.util.ArrayList;

rule "Start session"
when
    // for any EventA
    $a : EventA() from entry-point events
    // check session is not started for this userId
    not (exists(SessionStart(userId == $a.userId)))
then
    modify($a){setSeen(true);}
    List events = new ArrayList();
    events.add($a);
    insert(new SessionStart($a.getUserId(), System.currentTimeMillis(), events));
end

rule "join session"
when
    // for every new EventA
    $a : EventA(seen == false) from entry-point events
    // get event's session
    $session: SessionStart(userId == $a.userId)
then
    $session.getEvents().add($a);
    insertLogical(new SessionNotification($a.getUserId(), $session.getEvents().size()));
    modify($a) {setSeen(true);}

end

rule "End session"
// if session timed out, clean up first
salience 5
when
    // for any EventA
    $a : EventA() from entry-point events
    // check there is no following EventA with same userId within 30 seconds
    not (exists(EventA(this != $a, userId == $a.userId, this after[0, 30s] $a)
        from entry-point events))
    // get event's session
    $session: SessionStart(userId == $a.userId)
then
    insertLogical(new SessionEnd($a.getUserId(), System.currentTimeMillis(),
        $session.getEvents().size()));

    // cleanup
    for (Object $x : $session.getEvents())
        delete($x);
    delete($session);
end
 类似资料:
  • 本文向大家介绍C#构建分页应用的方法分析,包括了C#构建分页应用的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#构建分页应用的方法。分享给大家供大家参考,具体如下: 1、SQL语句 2、后台方法 注意:DBHelper.GetReader()方法、TranToList()方法等请自己完善。 一些计算方法 更多关于C#相关内容感兴趣的读者可查看本站专题:《C#字符串操作技巧总结

  • 本文向大家介绍gradle 分析构建,包括了gradle 分析构建的使用技巧和注意事项,需要的朋友参考一下 示例 在开始调整Gradle构建的性能之前,您应该建立基准并确定构建的哪些部分花费最多的时间。为此,您可以通过将--profile参数添加到Gradle命令来对构建进行概要分析: 构建完成后,您将在下./build/reports/profile/看到构建的HTML配置文件报告,如下所示:

  • 功能介绍 获取本APP定制分析中实时分析报告的数据,本报告是定制分析,支持维度和指标的自由组合,请详细阅读本文档说明了解使用详情。 接口 https://openapi.baidu.com/rest/2.0/mtj/svc/app/getDataByKey 请求参数 此处仅列本接口特有参数,公共参数请参考报告级API说明 获取表格数据 参数名 参数类型 是否必须 描述 method string

  • 我向web服务添加了以下依赖项 现在我的代码中出现了以下问题,不知道哪里出了问题。在添加这个依赖项之前,它工作得很好。 下面是完整的pom 我不明白哪里出了问题

  • 本文向大家介绍Android定时器和Handler用法实例分析,包括了Android定时器和Handler用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android定时器和Handler用法。分享给大家供大家参考。具体分析如下: 一、环境: 主机:WIN8 开发环境:Android Studio 二、定时器使用示例: 初始化: 创建定时器线程: 新建任务: 三、定时器和Ha

  • 本文向大家介绍Symfony2 session用法实例分析,包括了Symfony2 session用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了Symfony2 session用法。分享给大家供大家参考,具体如下: Symfony自带有session的方法,以前老版本2.2及以前的session用法是 后来Symfony2.3开始$this->getRequest()方法被废