ホームページ >データベース >mysql チュートリアル >Spark SQL ウィンドウ関数は、複雑な時間的条件に基づいてユーザー アクティビティ期間をどのように識別できるでしょうか?
Spark SQL ウィンドウ関数を使用して、複雑な時間条件に基づいてユーザー アクティビティ サイクルを識別します
Spark SQL のウィンドウ関数は、指定された時間範囲またはパーティション内の一連の行に対して計算を実行するための強力なメカニズムを提供します。一般的な用途は、特定の条件に基づいてユーザー アクティビティ サイクルの開始を決定することです。
定義ウィンドウ
これを行うために、2 つのウィンドウを定義します。
user_name
でパーティション化され、login_date
で並べ替えられます。 user_name
と session
によって分割され、後で決定されます。 新しいセッションの開始を識別します
新しいセッションがいつ開始されるかを判断する鍵は、連続する行のログイン日を比較することです。連続する 2 つのログイン日の差が 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 中国語 Web サイトの他の関連記事を参照してください。