2017-04-13 7 views
2

これは初心者の質問かもしれませんが、QuantileDiscretizerをspark 2.1のBucketizerよりも使用することの利点があるかどうかはわかりません。QuantileDiscretizerとSparkのBucketizerの違い

QuantileDiscretizerは推定値であり、NAN値を処理すると理解していますが、Bucketizerはトランスフォーマであり、データにNAN値があるとエラーが発生します。コードの下スパークdocumentationから

は、同様の出力を生成

from pyspark.ml.feature import QuantileDiscretizer 
from pyspark.ml.feature import Bucketizer 

data = [(0, 18.0), (1, 19.0), (2, 8.0), (3, 5.0), (4, 2.2)] 
df = spark.createDataFrame(data, ["id", "hour"]) 

result_discretizer = QuantileDiscretizer(numBuckets=3, inputCol="hour",outputCol="result").fit(df).transform(df) 
result_discretizer.show() 

splits = [-float("inf"),3, 10,float("inf")] 
result_bucketizer = Bucketizer(splits=splits, inputCol="hour",outputCol="result").transform(df) 
result_bucketizer.show() 

出力:

+---+----+------+ 
| id|hour|result| 
+---+----+------+ 
| 0|18.0| 2.0| 
| 1|19.0| 2.0| 
| 2| 8.0| 1.0| 
| 3| 5.0| 1.0| 
| 4| 2.2| 0.0| 
+---+----+------+ 

+---+----+------+ 
| id|hour|result| 
+---+----+------+ 
| 0|18.0| 2.0| 
| 1|19.0| 2.0| 
| 2| 8.0| 1.0| 
| 3| 5.0| 1.0| 
| 4| 2.2| 0.0| 
+---+----+------+ 

他の上の1つのいずれかの重要な利点がある場合は私に知らせてください!

答えて

2

QuantileDiscretizerは、データに基づいてバケットの分割を決定します。

Bucketizerは、splitsで指定したバケットにデータを格納します。

バケットを知っている場合はBucketizer、分割する場合はQuantileDiscretizerを使用してください。

この例で出力が似ているのは、考案されたデータとsplitsが選択されているためです。他のシナリオでは、結果が大きく異なる可能性があります。

+0

最後の質問にお答えできますか? 「大きなデータへのアクセスに違いがなければならないのか?どちらもビンを作る別の戦略です。 – Khan

関連する問題