{{cdd}和一对被创建的值都是一个值。e、 g
[(DenseVector([3,4]),10), (DenseVector([3,4]),20)]
现在我想按键k1
:DenseVector([3,4])
分组。我希望该行为将键k1
的所有值分组,它们是10
和{
而不是
[(DenseVector([3,4]), [10,20])]
如果我遗漏了什么,请告诉我。在
代码是:
#simplified version of code
#rdd1 is an rdd containing [(DenseVector([3,4]),10), (DenseVector([3,4]),20)]
rdd1.groupByKey().map(lambda x : (x[0], list(x[1])))
print(rdd1.collect())
好吧,这是一个棘手的问题,简短的回答是你不能。为了理解为什么你必须深入研究
DenseVector
实现。DenseVector
只是NumPyfloat64
ndarray
的包装由于NumPy}是可变的,所以不能以有意义的方式散列,尽管有趣的是提供了
^{pr2}$ndarrays
,不像{__hash__
方法。有一个有趣的问题涵盖了这个问题(参见:numpy ndarray hashability)。在DenseVector
从object
继承{id
(给定实例的内存地址):不幸的是,这意味着具有相同内容的两个
DenseVectors
具有不同的哈希:你能做什么?最简单的方法是使用不可变的数据结构,它提供一致的
hash
实现,例如元组:注意:在实践中,使用数组作为键很可能是个坏主意。对于大量的元素,散列过程可能是非常昂贵的有用的。不过,如果您真的需要这样的东西,Scala似乎可以正常工作:
相关问题 更多 >
编程相关推荐