Spark SQL 창 함수 및 복잡한 조건
사용자 로그인 세부 정보가 포함된 DataFrame이 있고 웹사이트에서 활성화 날짜를 나타내는 열을 추가한다고 가정해 보겠습니다. 단, 주의사항이 있습니다. 일정 시간이 지나면 사용자의 활동 기간이 만료되며, 다시 로그인하면 활성화 날짜가 재설정됩니다.
이 문제는 Spark SQL의 윈도우 기능을 사용하여 해결할 수 있습니다. 한 가지 방법은 다음과 같습니다.
1단계: 창 정의
<code>import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions._ val userWindow = Window.partitionBy("user_name").orderBy("login_date") val userSessionWindow = Window.partitionBy("user_name", "session")</code>
2단계: 새 세션 시작 감지
<code>val newSession = (coalesce( datediff($"login_date", lag($"login_date", 1).over(userWindow)), lit(0) ) > 5).cast("bigint") val sessionized = df.withColumn("session", sum(newSession).over(userWindow))</code>
3단계: 각 세션의 가장 빠른 날짜 찾기
<code>val result = sessionized .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session")</code>
이 방법은 슬라이딩 윈도우를 사용하여 데이터를 사용자별로 분할하고 로그인 날짜별로 정렬합니다. 그런 다음 동일한 세션 ID를 가진 행을 그룹화하여 세션 창을 정의합니다. 새 세션이 시작되는 시기를 감지하고(newSession) 각 세션에서 가장 빠른 로그인 날짜를 계산하여(became_active) 원하는 결과를 얻을 수 있습니다.
최신 Spark 개선 사항
Spark 3.2 이상의 경우 세션 창이 기본적으로 지원되므로 위의 솔루션이 더욱 간단해집니다. 자세한 내용은 공식 문서를 참조하세요.
위 내용은 Spark SQL 창 함수는 세션 기반 만료로 사용자 활성화 날짜를 어떻게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!