2017-04-13 334 views
2

這可能是一個新手問題,但是我無法理解在spark 2.1中是否有使用QuantileDiscretizer而不是Bucketizer的任何特定優勢?Spark中QuantileDiscretizer和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| 
+---+----+------+ 

請讓我知道,如果有一個比其他任何顯著優勢?

回答

2

QuantileDiscretizer確定基於所述數據剷鬥分裂。

Bucketizer將數據放入您通過splits指定桶。

因此,當您知道您需要的存儲桶和QuantileDiscretizer來使用Bucketizer來估算拆分。

即輸出是在實施例相似是由於人爲的數據和所選擇的splits。其他情況下結果可能會有很大差異。

+0

你能回答最後一個問題? 「在另外一個的顯著優勢呢?不應該出現在訪問大數據有區別嗎?都是不同的策略,使箱。 – Khan

相關問題