2017-05-23 62 views
0

我在pyspark有註冊表。爲什麼pyspark會給出錯誤的方差值?

+--------+-------+--------+------------+---------+-----------------+----------------------+ 
|order_id|user_id|eval_set|order_number|order_dow|order_hour_of_day|days_since_prior_order| 
+--------+-------+--------+------------+---------+-----------------+----------------------+ 
| 2168274|  2| prior|   1|  2|    11|     null| 
| 1501582|  2| prior|   2|  5|    10|     10| 
| 1901567|  2| prior|   3|  1|    10|      3| 
| 738281|  2| prior|   4|  2|    10|      8| 
| 1673511|  2| prior|   5|  3|    11|      8| 
| 1199898|  2| prior|   6|  2|    9|     13| 
| 3194192|  2| prior|   7|  2|    12|     14| 
| 788338|  2| prior|   8|  1|    15|     27| 
| 1718559|  2| prior|   9|  2|    9|      8| 
| 1447487|  2| prior|   10|  1|    11|      6| 
| 1402090|  2| prior|   11|  1|    10|     30| 
| 3186735|  2| prior|   12|  1|    9|     28| 
| 3268552|  2| prior|   13|  4|    11|     30| 
| 839880|  2| prior|   14|  3|    10|     13| 
| 1492625|  2| train|   15|  1|    11|     30| 
+--------+-------+--------+------------+---------+-----------------+----------------------+ 

我想計算days_since_prior_order的方差,不包括空值。正確的值應該是97.91836734693878,這是由配置單元和python給出的。但我的pyspark給了我105.45054945054943。

spark.sql("select variance(days_since_prior_order) from \ 
(select * from orders where user_id=2 and days_since_prior_order is not null) ").show() 

原始表格數據類型正確。

|-- order_id: long (nullable = true) 
|-- user_id: long (nullable = true) 
|-- eval_set: string (nullable = true) 
|-- order_number: short (nullable = true) 
|-- order_dow: short (nullable = true) 
|-- order_hour_of_day: short (nullable = true) 
|-- days_since_prior_order: short (nullable = true) 
+0

你是如何計算的火花方差的文檔,你可以請提供代碼。 ?? –

回答

1

嘗試使用代替pyspark.sql.functions.variance(COL)下面的函數:

pyspark.sql.functions.var_pop(COL)

聚合函數:返回組中值的總體方差。

與您的列數據,VAR_POP給了我這樣的結果:

[Row(var_pop(days_since_prior_order)=97.91836734693877)] 

的原因是:

  • 方差()VAR_SAMP()由1比例/(N-1)
  • var_pop()按比例縮放1/N

選擇了N個值。

請參閱population and sample variance以獲得有用的鏈接。

Here你會發現VAR_POP()

相關問題