집 >데이터 베이스 >MySQL 튜토리얼 >Spark SQL 창 함수는 복잡한 임시 조건을 기반으로 사용자 활동 기간을 어떻게 식별할 수 있습니까?
Spark SQL 창 기능을 사용하여 복잡한 시간 조건을 기반으로 사용자 활동 주기를 식별
Spark SQL의 창 함수는 지정된 시간 범위 또는 파티션 내의 행 집합에 대해 계산을 수행하기 위한 강력한 메커니즘을 제공합니다. 일반적인 적용은 특정 조건에 따라 사용자 활동 주기의 시작을 결정하는 것입니다.
정의 창
이를 위해 두 개의 창을 정의합니다.
user_name
으로 분할되고 login_date
으로 정렬됩니다. user_name
및 session
으로 분할되어 나중에 결정됩니다. 새 세션의 시작을 식별합니다
새 세션이 시작되는 시기를 결정하는 핵심은 연속된 행의 로그인 날짜를 비교하는 것입니다. 연속된 두 로그인 날짜의 차이가 5일을 초과하면 새 세션이 식별됩니다. 다음 코드를 사용하여 이를 캡처합니다.
<code class="language-scala">val newSession = (coalesce( datediff($"login_date", lag($"login_date", 1).over(userWindow)), lit(0) ) > 5).cast("bigint")</code>
세션 ID 할당
이제 userWindow
의 newSession
값을 합산하여 각 행에 세션 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!