我在pyspark.mllib.stat.KernelDensity
中使用手工制作的测试数据遇到了问题。 numpy.float
和Python的通用float
之间存在某种问题/差异,这些问题/差异在使用(部分)pyspark
时出现;特别是用numpy.float
的中断构建的RDD。
有没有办法可以创建NumPy数组,使得它们的元素是python浮点数而不是numpy.float
的?
import pyspark
import pyspark.mllib.stat
import numpy
sc = pyspark.SparkContext("local", 'test2')
rdd1 = sc.parallelize([1.0, 2.0, 3.0])
rdd2 = sc.parallelize(numpy.arange(1.0, 4.0, 1.0))
(kd1, kd2) = pyspark.mllib.stat.KernelDensity(), pyspark.mllib.stat.KernelDensity()
kd1.setBandwidth(0.2)
kd1.setSample(rdd1)
kd2.setBandwidth(0.2)
kd2.setSample(rdd2)
x = numpy.arange(0, 5.0, 0.1)
y1 = kd1.estimate(x)
y2 = kd2.estimate(x)
# can manually convert to "python float"
rdd2 = sc.parallelize([float(x) for x in numpy.arange(1.0, 4.0, 1.0)])
kd2.setSample(rdd2)
y2 = kd2.estimate(x)
答案 0 :(得分:0)
尝试更换:
rdd2 = sc.parallelize(numpy.arange(1.0, 4.0, 1.0))
与
rdd2 = sc.parallelize(numpy.arange(1.0, 4.0, 1.0).tolist())
在第一个代码块中。