> 데이터 베이스 > MySQL 튜토리얼 > Spark SQL 창 함수는 복잡한 임시 조건을 기반으로 사용자 활동 기간을 어떻게 식별할 수 있습니까?

Spark SQL 창 함수는 복잡한 임시 조건을 기반으로 사용자 활동 기간을 어떻게 식별할 수 있습니까?

DDD
풀어 주다: 2025-01-10 11:39:42
원래의
857명이 탐색했습니다.

How Can Spark SQL Window Functions Identify User Activity Periods Based on Complex Temporal Conditions?

Spark SQL 창 기능을 사용하여 복잡한 시간 조건을 기반으로 사용자 활동 주기를 식별

Spark SQL의 창 함수는 지정된 시간 범위 또는 파티션 내의 행 집합에 대해 계산을 수행하기 위한 강력한 메커니즘을 제공합니다. 일반적인 적용은 특정 조건에 따라 사용자 활동 주기의 시작을 결정하는 것입니다.

정의 창

이를 위해 두 개의 창을 정의합니다.

  • userWindow: user_name으로 분할되고 login_date으로 정렬됩니다.
  • userSessionWindow: user_namesession으로 분할되어 나중에 결정됩니다.

새 세션의 시작을 식별합니다

새 세션이 시작되는 시기를 결정하는 핵심은 연속된 행의 로그인 날짜를 비교하는 것입니다. 연속된 두 로그인 날짜의 차이가 5일을 초과하면 새 세션이 식별됩니다. 다음 코드를 사용하여 이를 캡처합니다.

<code class="language-scala">val newSession =  (coalesce(
  datediff($"login_date", lag($"login_date", 1).over(userWindow)),
  lit(0)
) > 5).cast("bigint")</code>
로그인 후 복사

세션 ID 할당

이제 userWindownewSession 값을 합산하여 각 행에 세션 ID를 할당할 수 있습니다.

<code class="language-scala">val sessionized = df.withColumn("session", sum(newSession).over(userWindow))</code>
로그인 후 복사

활성 날짜 확인

마지막으로 각 userSessionWindow 내에서 가장 작은 login_date을 찾아 각 세션의 became_active 날짜를 결정합니다.

<code class="language-scala">val result = sessionized
  .withColumn("became_active", min($"login_date").over(userSessionWindow))
  .drop("session")</code>
로그인 후 복사

제공된 샘플 데이터 사용:

<code class="language-scala">val df = Seq(
  ("SirChillingtonIV", "2012-01-04"), ("Booooooo99900098", "2012-01-04"),
  ("Booooooo99900098", "2012-01-06"), ("OprahWinfreyJr", "2012-01-10"), 
  ("SirChillingtonIV", "2012-01-11"), ("SirChillingtonIV", "2012-01-14"),
  ("SirChillingtonIV", "2012-08-11")
).toDF("user_name", "login_date")</code>
로그인 후 복사

결과는 다음과 같습니다.

<code>+----------------+----------+-------------+
|       user_name|login_date|became_active|
+----------------+----------+-------------+
|  OprahWinfreyJr|2012-01-10|   2012-01-10|
|SirChillingtonIV|2012-01-04|   2012-01-04|
|SirChillingtonIV|2012-01-11|   2012-01-11|
|SirChillingtonIV|2012-01-14|   2012-01-11|
|SirChillingtonIV|2012-08-11|   2012-08-11|
|Booooooo99900098|2012-01-04|   2012-01-04|
|Booooooo99900098|2012-01-06|   2012-01-04|
+----------------+----------+-------------+</code>
로그인 후 복사

Spark SQL의 창 함수를 사용하여 시간 데이터의 복잡한 조건을 효율적으로 결정하는 방법을 보여줍니다.

위 내용은 Spark SQL 창 함수는 복잡한 임시 조건을 기반으로 사용자 활동 기간을 어떻게 식별할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿