2017-05-19 3 views
1

pysparkのKernelDensity.estimateは、通常配布されているデータセットで正しく機能しますか?私はそれを試みるときにエラーが発生します。pyspark.mllib.stat.KernelDensityのKernelDensity.estimateは、入力データが正規配布されている場合に機能しますか?

:私は https://issues.apache.org/jira/browse/SPARK-20803(入力データが正常に分布している場合pyspark.mllib.stat.KernelDensityでKernelDensity.estimateはnet.razorvine.pickle.PickleExceptionをスローデータが正規分布していない(エラーなし))

例コードを提出しました

vecRDD = sc.parallelize(colVec) 
kd = KernelDensity() 
kd.setSample(vecRDD) 
kd.setBandwidth(3.0) 
# Find density estimates for the given values 
densities = kd.estimate(samplePoints) 

データがガウスでない場合は、たとえば 5.6654703477e-05,0.000100010001,0.000100010001,0.000100010001、.....スカラ座を使用して参照するために

、ガウスデータについて、 コード:私は取得

vecRDD = sc.parallelize(colVec) 
kd = new KernelDensity().setSample(vecRDD).setBandwidth(3.0) 
// Find density estimates for the given values 
densities = kd.estimate(samplePoints) 

: [0.04113814235801906,1.0994865517293571E -163,0.0,0.0、.....

答えて

0

私は同じ問題に直面し、問題を非常に最小限にとどめることができましたtest case。 PythonでNumpyを使ってRDDにデータを生成しているのなら、それは問題です!

import numpy as np 
kd = KernelDensity() 
kd.setSample(sc.parallelize([0.0, 1.0, 2.0, 3.0])) # THIS WORKS 
# kd.setSample(sc.parallelize([0.0, np.float32(1.0), 2.0, 3.0])) # THIS FAILS 
kd.setBandwidth(0.35) 
kd.estimate([0.0, 1.0]) 

これは、同様にあなたの問題だったSpark issueが固定されるまで、単にPythonの基本型にnumpyのデータを変換する場合。 np.asscalar機能を使用してこれを行うことができます。

関連する問題