mllib KernelDensity错误

时间:2017-08-09 16:18:02

标签: python-3.x pyspark apache-spark-mllib py4j

我正试图以这种方式使用pyspark.mllib.stat.KernelDensity:

data = sc.parallelize([0, 1, 2, 2, 1, 1, 1, 1, 1, 2, 0, 0])
kd = KernelDensity()
kd.setSample(data)
kd.setBandwidth(3)
densities = kd.estimate([-1.0, 2.0, 5.0])

但最终得到此错误:

  

----------------------------------------------- ---------------------------- Py4JError Traceback(最近的电话   最后)in()         8         9#查找给定值的密度估计值   ---> 10密度= kd.estimate([ - 1.0,2.0,5.0])

     

/home/user10215193/anaconda3/lib/python3.6/site-packages/pyspark/mllib/stat/KernelDensity.py   估计(自我,分数)        56分=列表(分)        57密度= callMLlibFunc(   ---> 58“estimateKernelDensity”,self._sample,self._bandwidth,points)        59返回np.asarray(密度)

     

/home/user10215193/anaconda3/lib/python3.6/site-packages/pyspark/mllib/common.py   在callMLlibFunc(name,* args)中       129 api = getattr(sc._jvm.PythonMLLibAPI(),name)       130打印(api)    - > 131 return callJavaFunc(sc,api,* args)       132       133

     

/home/user10215193/anaconda3/lib/python3.6/site-packages/pyspark/mllib/common.py   在callJavaFunc中(sc,func,* args)       121“”“调用Java函数”“”       122 args = [_py2java(sc,a)for a args]    - > 123返回_java2py(sc,func(* args))       124       125

     

/home/user10215193/anaconda3/lib/python3.6/site-packages/py4j/java_gateway.py   在调用(self,* args)1131 answer =   self.gateway_client.send_command(command)1132 return_value   = get_return_value(    - > 1133回答,self.gateway_client,self.target_id,self.name)1134 1135 for temp_arg in temp_args:

     

/home/user10215193/anaconda3/lib/python3.6/site-packages/py4j/protocol.py   在get_return_value中(answer,gateway_client,target_id,name)       321提出Py4JError(       322“调用{0} {1} {2}时发生错误。跟踪:\ n {3} \ n”。    - > 323格式(target_id,“。”,名称,值))       324其他:       325提出Py4JError(

     

Py4JError:调用o19.estimateKernelDensity时发生错误。   跟踪:py4j.Py4JException:方法estimateKernelDensity([class   org.apache.spark.api.java.JavaRDD,类java.lang.Integer,类   java.util.ArrayList])不存在于   py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)     在   py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)     在py4j.Gateway.invoke(Gateway.java:272)at   py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)     在py4j.commands.CallCommand.execute(CallCommand.java:79)at   py4j.GatewayConnection.run(GatewayConnection.java:214)at   java.lang.Thread.run(Thread.java:748)

我在这里找不到类似的东西,所以如果有人可以帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:0)

您必须注意以下类型:

  • bandwidth必须为float
  • sample必须为RDD[float]

所以用以下代码替换你的代码:

kd.setSample(data.map(float))
kd.setBandwidth(3.0)
densities = kd.estimate([-1.0, 2.0, 5.0])

你会没事的。