Scalaを使用してSparkでスライディングウィンドウランクを設定するにはどうすればよいですか?

user3407267

私はデータセットを持っています:

+-----+-------------------+---------------------+------------------+
|query|similar_queries    |model_score          |count             |
+-----+-------------------+---------------------+------------------+
|shirt|funny shirt        |0.0034038130658784866|189.0             |
|shirt|shirt womens       |0.0019435265241921438|136.0             |
|shirt|watch              |0.001097496453284101 |212.0             |
|shirt|necklace           |6.694577024597908E-4 |151.0             |
|shirt|white shirt        |0.0037413097560623485|217.0             |
|shirt|shoes              |0.0022062579255572733|575.0             |
|shirt|crop top           |9.065831060804897E-4 |173.0             |
|shirt|polo shirts for men|0.007706416273211698 |349.0             |
|shirt|shorts             |0.002669621942466027 |200.0             |
|shirt|black shirt        |0.03264296242546658  |114.0             |
+-----+-------------------+---------------------+------------------+

最初に「カウント」に基づいてデータセットをランク付けしています。

lazy val countWindowByFreq = Window.partitionBy(col(QUERY)).orderBy(col(COUNT).desc)
val ranked_data = data.withColumn("count_rank", row_number over countWindowByFreq)

+-----+-------------------+---------------------+------------------+----------+
|query|similar_queries    |model_score          |count             |count_rank|
+-----+-------------------+---------------------+------------------+----------+
|shirt|shoes              |0.0022062579255572733|575.0             |1         |
|shirt|polo shirts for men|0.007706416273211698 |349.0             |2         |
|shirt|white shirt        |0.0037413097560623485|217.0             |3         |
|shirt|watch              |0.001097496453284101 |212.0             |4         |
|shirt|shorts             |0.002669621942466027 |200.0             |5         |
|shirt|funny shirt        |0.0034038130658784866|189.0             |6         |
|shirt|crop top           |9.065831060804897E-4 |173.0             |7         |
|shirt|necklace           |6.694577024597908E-4 |151.0             |8         |
|shirt|shirt womens       |0.0019435265241921438|136.0             |9         |
|shirt|black shirt        |0.03264296242546658  |114.0             |10        |
+-----+-------------------+---------------------+------------------+----------+

現在、row_number(4行)のローリングウィンドウを使用してコンテンツをランク付けし、model_scoreに基づいてウィンドウ内でランク付けしようとしています。例:

最初のウィンドウ、row_number 1から4では、新しいランク(新しい列)は次のようになります。

1. polo shirts for men
2. white shirt
3. shoes
4. watch

最初のウィンドウ、row_number 5から8では、新しいランク(新しい列)は次のようになります。

5. funny shirt
6. shorts
7. shirt womens 
8. crop top

最初のウィンドウで、row_number 9を休ませると、新しいランク(新しい列)は次のようになります。

9. black shirt 
10. shirt womens

このスパークとScalaでどのように達成できるか教えてもらえますか?使用できる定義済みの関数はありますか?

私は試した :

怠惰なvalMODEL_RANK = Window.partitionBy(col(QUERY))。orderBy(col(MODEL_SCORE).desc).rowsBetween(0、3)

しかし、これは私に与えます:

sql.AnalysisException: Window Frame ROWS BETWEEN CURRENT ROW AND 3 FOLLOWING must match the required frame ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW;

また、.rowsBetween(-3、0)で試してみましたが、エラーも発生します:

org.apache.spark.sql.AnalysisException: Window Frame ROWS BETWEEN 3 PRECEDING AND CURRENT ROW must match the required frame ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW;
vdep

count_rank計算したので、次のステップは、行を4つのセットにグループ化する方法を見つけることです。これは次のように実行できます。

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

val ranked_data_grouped = ranked_data
  .withColumn("bucket", (($"count_rank" -1)/4).cast(IntegerType))

ranked_data_groupedは次のようになります。

+-----+-------------------+---------------------+------------------+----------+-------+
|query|similar_queries    |model_score          |count             |count_rank|bucket |
+-----+-------------------+---------------------+------------------+----------+-------+
|shirt|shoes              |0.0022062579255572733|575.0             |1         |0      |
|shirt|polo shirts for men|0.007706416273211698 |349.0             |2         |0      |      
|shirt|white shirt        |0.0037413097560623485|217.0             |3         |0      |
|shirt|watch              |0.001097496453284101 |212.0             |4         |0      |
|shirt|shorts             |0.002669621942466027 |200.0             |5         |1      |
|shirt|funny shirt        |0.0034038130658784866|189.0             |6         |1      |
|shirt|crop top           |9.065831060804897E-4 |173.0             |7         |1      |
|shirt|necklace           |6.694577024597908E-4 |151.0             |8         |1      |
|shirt|shirt womens       |0.0019435265241921438|136.0             |9         |2      |
|shirt|black shirt        |0.03264296242546658  |114.0             |10        |2      |
+-----+-------------------+---------------------+------------------+----------+-------+

さて、あなたがしなければならないすべては、パーティションによって、あるbucketによって&オーダーmodel_score

val output = ranked_data_grouped
  .withColumn("finalRank", row_number().over(Window.partitionBy($"bucket").orderBy($"model_score".desc)))

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

時間ベースのスライディングウィンドウを使用して行数を計算するにはどうすればよいですか?

分類Dev

ブラウザウィンドウのIDを設定するにはどうすればよいですか?

分類Dev

ファブリックを使用してディスクドライブをマウントするにはどうすればよいですか

分類Dev

Javascript / jQueryを使用して、ブラウザのウィンドウサイズに応じてCSSクラスの高さを動的に設定するにはどうすればよいですか?

分類Dev

データ バインディングを使用して ItemsControl に Z インデックスを設定するにはどうすればよいですか?

分類Dev

スライディング/ラギングウィンドウを実装するにはどうすればよいですか?

分類Dev

XFceでThunarウィンドウをデスクトップとして設定するにはどうすればよいですか?

分類Dev

ラップアラウンドを使用して、ndarray上にスライディングウィンドウを作成するにはどうすればよいですか?

分類Dev

スライディングウィンドウでPyTorchテンソルのサイズを変更するにはどうすればよいですか?

分類Dev

特定のファイルのエクスプローラーウィンドウをTopMostフォームの子ウィンドウとして設定するにはどうすればよいですか?

分類Dev

スクリプトを使用してウィンドウ設定を構成するにはどうすればよいですか?

分類Dev

wmctrlを使用して特定のクラスのウィンドウをアクティブ化するにはどうすればよいですか?

分類Dev

リストのリストから要素のスライディングウィンドウを選択するにはどうすればよいですか?

分類Dev

ブラウザウィンドウの高さを基準にしてコンテナのパディングを設定するにはどうすればよいですか

分類Dev

Excelテーブルでスライディングウィンドウを実行するにはどうすればよいですか?

分類Dev

X11libを使用してプログラムでウィンドウのサイズを変更するにはどうすればよいですか?

分類Dev

バッチを使用してフォアグラウンドウィンドウを取得するにはどうすればよいですか?

分類Dev

複数のオーディオデバイスをサラウンドとして使用するにはどうすればよいですか?

分類Dev

CPPプログラムを使用してウィンドウにテキストを挿入するにはどうすればよいですか?

分類Dev

Reactを使用してReact-Particles-Jsをバックグラウンドに設定するにはどうすればよいですか?

分類Dev

クラスを使用してウィンドウにテキストを描画するにはどうすればよいですか?

分類Dev

セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

分類Dev

Pythonでgtkウィンドウを作成し、バックグラウンドでコードを実行するにはどうすればよいですか?

分類Dev

Windows 8 / 8.1で「プログラムの関連付けを設定する」ウィンドウを表示するにはどうすればよいですか?

分類Dev

コマンドラインでウィンドウの場所(デスクトップ上)を見つけるにはどうすればよいですか?

分類Dev

コマンドラインでウィンドウの場所(デスクトップ上)を見つけるにはどうすればよいですか?

分類Dev

スライディングウィンドウを使用して3D配列を取得するためにDataFrameの形状を変更するにはどうすればよいですか?

分類Dev

角度6のドロップダウンで双方向バインディングデータを設定するにはどうすればよいですか?

分類Dev

Qtでプログラムによってメインウィンドウにボタンを追加し、cssファイルを使用してボタンのスタイルを変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    時間ベースのスライディングウィンドウを使用して行数を計算するにはどうすればよいですか?

  2. 2

    ブラウザウィンドウのIDを設定するにはどうすればよいですか?

  3. 3

    ファブリックを使用してディスクドライブをマウントするにはどうすればよいですか

  4. 4

    Javascript / jQueryを使用して、ブラウザのウィンドウサイズに応じてCSSクラスの高さを動的に設定するにはどうすればよいですか?

  5. 5

    データ バインディングを使用して ItemsControl に Z インデックスを設定するにはどうすればよいですか?

  6. 6

    スライディング/ラギングウィンドウを実装するにはどうすればよいですか?

  7. 7

    XFceでThunarウィンドウをデスクトップとして設定するにはどうすればよいですか?

  8. 8

    ラップアラウンドを使用して、ndarray上にスライディングウィンドウを作成するにはどうすればよいですか?

  9. 9

    スライディングウィンドウでPyTorchテンソルのサイズを変更するにはどうすればよいですか?

  10. 10

    特定のファイルのエクスプローラーウィンドウをTopMostフォームの子ウィンドウとして設定するにはどうすればよいですか?

  11. 11

    スクリプトを使用してウィンドウ設定を構成するにはどうすればよいですか?

  12. 12

    wmctrlを使用して特定のクラスのウィンドウをアクティブ化するにはどうすればよいですか?

  13. 13

    リストのリストから要素のスライディングウィンドウを選択するにはどうすればよいですか?

  14. 14

    ブラウザウィンドウの高さを基準にしてコンテナのパディングを設定するにはどうすればよいですか

  15. 15

    Excelテーブルでスライディングウィンドウを実行するにはどうすればよいですか?

  16. 16

    X11libを使用してプログラムでウィンドウのサイズを変更するにはどうすればよいですか?

  17. 17

    バッチを使用してフォアグラウンドウィンドウを取得するにはどうすればよいですか?

  18. 18

    複数のオーディオデバイスをサラウンドとして使用するにはどうすればよいですか?

  19. 19

    CPPプログラムを使用してウィンドウにテキストを挿入するにはどうすればよいですか?

  20. 20

    Reactを使用してReact-Particles-Jsをバックグラウンドに設定するにはどうすればよいですか?

  21. 21

    クラスを使用してウィンドウにテキストを描画するにはどうすればよいですか?

  22. 22

    セキュリティグループを使用してAWSEC2インスタンスからのすべてのアウトバウンドトラフィックを拒否するにはどうすればよいですか?

  23. 23

    Pythonでgtkウィンドウを作成し、バックグラウンドでコードを実行するにはどうすればよいですか?

  24. 24

    Windows 8 / 8.1で「プログラムの関連付けを設定する」ウィンドウを表示するにはどうすればよいですか?

  25. 25

    コマンドラインでウィンドウの場所(デスクトップ上)を見つけるにはどうすればよいですか?

  26. 26

    コマンドラインでウィンドウの場所(デスクトップ上)を見つけるにはどうすればよいですか?

  27. 27

    スライディングウィンドウを使用して3D配列を取得するためにDataFrameの形状を変更するにはどうすればよいですか?

  28. 28

    角度6のドロップダウンで双方向バインディングデータを設定するにはどうすればよいですか?

  29. 29

    Qtでプログラムによってメインウィンドウにボタンを追加し、cssファイルを使用してボタンのスタイルを変更するにはどうすればよいですか?

ホットタグ

アーカイブ