我正试图以这种方式使用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)
我在这里找不到类似的东西,所以如果有人可以帮助我,我会非常感激。
答案 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])
你会没事的。