집 >데이터 베이스 >MySQL 튜토리얼 >창 함수를 사용하여 Spark SQL에서 사용자 활성 날짜를 확인하는 방법은 무엇입니까?
질문:
웹사이트에 로그인한 사용자의 기록이 포함된 DataFrame입니다. 사용자가 활동하는 시기를 결정하고 활동 기간을 고려해야 합니다. 이 기간 이후에 사용자가 다시 로그인하면 활성 날짜가 재설정됩니다.
제안 방법:
히스테리시스 및 재귀 기능이 있는 윈도우 기능을 사용하여 활동 기간 내 첫 번째 로그인 또는 가장 최근 로그인을 식별하여 활동 날짜를 결정합니다.
Spark 네이티브 솔루션(>= 3.2):
Spark 3.2 이상에서는 세션 창을 지원합니다. 사용 예는 공식 문서를 참조하세요.
레거시 솔루션(Spark < 3.2):
가져오기 기능:
Window
은 창을 정의하는 데 사용됩니다coalesce
, datediff
, lag
, lit
, min
, sum
정의 창:
userWindow
user_name
으로 분할하고 login_date
userSessionWindow
user_name
및 session
에 의한 새 세션의 시작 찾기:
datediff
, lag
을 이용하여 로그인 날짜를 비교하고, 활동 기간보다 큰 공백이 있는지 확인해보세요. cast
을 사용하여 결과를 bigint
로 변환합니다. userWindow
에서 sum
을 사용하세요. 각 세션의 가장 빠른 날짜 찾기:
withColumn
열을 추가하려면 session
을 사용하세요. userSessionWindow
을 찾으려면 min
의 login_date
을 사용하세요. session
열을 삭제하세요. 예:
<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") val result = sessionized //sessionized is assumed to be defined elsewhere, this is a crucial part missing from the original .withColumn("became_active", min($"login_date").over(userSessionWindow)) .drop("session") df.show(5) result.show(5)</code>
이 솔루션을 완성하는 데 중요한 부분인 sessionized
정의가 예제 코드에서 누락되었습니다. session
열은 활동 기간과 로그인 날짜를 기준으로 계산해야 합니다. 이를 위해서는 일반적으로 사용자 정의 함수나 더 복잡한 창 함수 논리가 필요합니다. 완전한 솔루션을 위해서는 누락된 코드 조각을 추가해야 합니다.
위 내용은 창 함수를 사용하여 Spark SQL에서 사용자 활성 날짜를 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!