[解決済み] Spark - Sparkでパーセンタイルを計算する方法は?
2022-02-18 14:06:54
質問
1列のデータフレームから0.8パーセンタイルを取得しようとしていました。私はこの方法で試してみました。
val limit80 = 0.8
val dfSize = df.count()
val perfentileIndex = dfSize*limit80
dfSorted = df.sort()
val percentile80 = dfSorted .take(perfentileIndex).last()
しかし、大きなデータフレームの場合、異なるノードに分散される可能性があるので、これは失敗すると思います。
パーセンタイルを計算するために何か良い方法はないでしょうか?
df.take(index)
は、ノード内のパーティションだけでなく、本当にデータセット全体を考慮することになります。
どのように解決するのですか?
Spark 2.xの場合、以下のようになります。 approxQuantile のようになります。
val df = Seq(
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29
).toDF("num")
df.stat.approxQuantile("num", Array(0.8), 0.1)
// res4: Array[Double] = Array(26.0)
第3パラメータが小さいほど
relativeError
となり、計算が高くなります。 以下はAPIドキュメントに記載されている関連事項です。
相対エラー : 達成すべき相対的な目標精度(大 または0に等しい)。 0に設定すると,正確な分位数が計算される。 これは非常に高価になる可能性があります。
関連
-
[解決済み] スパークSPLラウンド&ブラウンド
-
[解決済み] Scala : valへの再割り当て [重複].
-
[解決済み] Traitの代わりに抽象クラスを使用する利点は何ですか?
-
[解決済み】Scalaの記号演算子にはどんな意味があるの?
-
[解決済み】case objectとobjectの違いについて
-
[解決済み】Scalaでリスト内のアイテムを取得する?
-
[解決済み】良いスカラズの紹介【終了しました
-
[解決済み】レイジーバルって何するもの?
-
[解決済み] マクロから匿名クラスのメソッドを持つ構造型を取得する
-
[解決済み] DataFrameのパーティショニングはどのように定義するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ScalaのSeqへのアペンド
-
[解決済み] Scalaでループから抜け出すにはどうしたらいいですか?
-
[解決済み] Scala マップ foreach
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み] スカラズのイテレート。「より大きな」モナドのために `EnumeratorT` を `IterateeT` にマッチングさせる「リフティング」。
-
[解決済み】Scala 2.8 breakOut
-
[解決済み】Scalaで`:_*`(コロン・アンダースコア・スター)は何をするのですか?
-
[解決済み】良いスカラズの紹介【終了しました
-
[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
-
[解決済み] Scalaのパターンマッチングシステムで比較演算子を使う