ホームページ >データベース >mysql チュートリアル >Spark SQL ウィンドウ関数は、複雑な時間的条件に基づいてユーザー アクティビティ期間をどのように識別できるでしょうか?

Spark SQL ウィンドウ関数は、複雑な時間的条件に基づいてユーザー アクティビティ期間をどのように識別できるでしょうか?

DDD
DDDオリジナル
2025-01-10 11:39:42816ブラウズ

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

Spark SQL ウィンドウ関数を使用して、複雑な時間条件に基づいてユーザー アクティビティ サイクルを識別します

Spark SQL のウィンドウ関数は、指定された時間範囲またはパーティション内の一連の行に対して計算を実行するための強力なメカニズムを提供します。一般的な用途は、特定の条件に基づいてユーザー アクティビティ サイクルの開始を決定することです。

定義ウィンドウ

これを行うために、2 つのウィンドウを定義します。

  • userWindow: user_name でパーティション化され、login_date で並べ替えられます。
  • userSessionWindow: user_namesession によって分割され、後で決定されます。

新しいセッションの開始を識別します

新しいセッションがいつ開始されるかを判断する鍵は、連続する行のログイン日を比較することです。連続する 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 の割り当て

これで、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。