データフレームにいくつかのウィンドウ関数(ntile
およびpercentRank
)を使用しようとしていますが、使用方法がわかりません。
誰でもこれを手伝ってくれますか? Python APIドキュメント には、例はありません。
具体的には、データフレーム内の数値フィールドの変位値を取得しようとしています。
私はspark 1.4.0を使用しています。
ウィンドウ機能を使用するには、最初にウィンドウを作成する必要があります。定義は通常のSQLとほぼ同じです。つまり、順序、パーティション、またはその両方を定義できます。まず、ダミーデータを作成します。
import numpy as np
np.random.seed(1)
keys = ["foo"] * 10 + ["bar"] * 10
values = np.hstack([np.random.normal(0, 1, 10), np.random.normal(10, 1, 100)])
df = sqlContext.createDataFrame([
{"k": k, "v": round(float(v), 3)} for k, v in Zip(keys, values)])
HiveContext
を使用していることを確認してください(Spark <2.0のみ):
from pyspark.sql import HiveContext
assert isinstance(sqlContext, HiveContext)
ウィンドウを作成します。
from pyspark.sql.window import Window
w = Window.partitionBy(df.k).orderBy(df.v)
これは
(PARTITION BY k ORDER BY v)
sQLで。
経験則として、ウィンドウ定義には常にPARTITION BY
句を指定しない場合Sparkはすべてのデータを単一のパーティションに移動します。ORDER BY
は一部の関数に必要ですが、異なる場合(通常は集約)はオプションです。
また、ウィンドウスパンの定義に使用できる2つのオプションがあります-ROWS BETWEEN
およびRANGE BETWEEN
。これらは、この特定のシナリオでは役に立ちません。
最後に、クエリに使用できます。
from pyspark.sql.functions import percentRank, ntile
df.select(
"k", "v",
percentRank().over(w).alias("percent_rank"),
ntile(3).over(w).alias("ntile3")
)
ntile
は、変位値とは何の関係もありません。