- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 RDD,每个成员都是键值对,键是 DenseVector
,值是 int
。例如
[(DenseVector([3,4]),10), (DenseVector([3,4]),20)]
现在我想按键 k1
进行分组:DenseVector([3,4])
。我希望该行为将键 k1
的所有值分组,即 10
和 20
。但是我得到的结果是
[(DenseVector([3,4]), 10), (DenseVector([3,4]), 20)]
代替
[(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
只是 NumPy float64
ndarray
>>> dv1 = DenseVector([3.0, 4.0])
>>> type(dv1.array)
<type 'numpy.ndarray'>
>>> dv1.array.dtype
dtype('float64')
因为 NumPy ndarrays
,不像 DenseVector
是可变的,不能以有意义的方式散列,尽管有趣的是提供了 __hash__
方法。有一个有趣的问题涵盖了这个问题(参见:numpy ndarray hashability)。
>>> dv1.array.__hash__() is None
False
>>> hash(dv1.array)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'numpy.ndarray'
DenseVector
继承了 object
的 __hash__
方法,它只是基于一个 id
(一个对象的内存地址)给定实例):
>>> id(d1) / 16 == hash(d1)
True
不幸的是,这意味着具有相同内容的两个 DenseVectors
具有不同的哈希值:
>>> dv2 = DenseVector([3.0, 4.0])
>>> hash(dv1) == hash(dv2)
False
你能做什么?最简单的方法是使用提供一致的 hash
实现的不可变数据结构,例如元组:
rdd.groupBy(lambda (k, v): tuple(k))
注意:在实践中,使用数组作为键很可能是个坏主意。对于大量元素,散列过程可能非常昂贵而无法使用。尽管如此,如果您真的需要这样的东西,Scala 似乎工作得很好:
import org.apache.spark.mllib.linalg.Vectors
val rdd = sc.parallelize(
(Vectors.dense(3, 4), 10) :: (Vectors.dense(3, 4), 20) :: Nil)
rdd.groupByKey.collect
关于python - 如何在 Spark 中以 DenseVector 为键对 RDD 进行 groupByKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31449412/
我有课Entreprise具有基元数据类型和另一个类上的映射:Etablissement它仅由原始数据类型组成。 public class Entreprise implements Comparab
请帮助我理解在数据集上使用时传递给 groupByKey 的参数 scala> val data = spark.read.text("Sample.txt").as[String] data: or
groupByKey 的文档中有一些可怕的语言,警告它可能“非常昂贵”,并建议使用 aggregateByKey相反,只要有可能。 我想知道成本的差异是否来自这样一个事实,即对于某些聚合,整个组永远不
我为我的数据定义了一个自定义类 Person 并使用了 groupByKey 操作,如下所示: public class Person implements Serializable { pr
我正在尝试根据交易数据生成简单的客户摘要。例如,给定目标交易类型,发生了多少笔交易以及总金额是多少? 原始输入示例: custid desc amount 111 coffee
我正在尝试处理一些数据并以这样的方式写入输出,即结果按键分区,并按另一个参数排序 - 比如 ASC。例如, >>> data =sc.parallelize(range(10000))
根据 Databricks 最佳实践,应避免使用 Spark groupByKey,因为 Spark groupByKey 处理的工作方式是,信息将首先在 worker 之间洗牌,然后再进行处理发生。
给定一个列表[v]和一个键控函数f::v -> k,我想生成一个 map Map k [v]。 Haskell 中是否存在这样的东西? import Data.Map groupByKey :: (v
我怎样才能让 GroupByKey 触发早期结果,而不是等待所有数据到达(在我的情况下这是相当长的时间)。我试图通过早期触发将我的输入 PCollection 拆分到窗口中,但是它只是行不通。在给出结
我在 java 中有一个 apache beam 管道,如下所示: pipeline .apply("Read pubsub",PubsubIO.readStrings
我有一个类型为 ((id, ts), some value) 的有序 RDD。这是仅在 id 字段上使用自定义分区程序进行分区的。 math.abs(id.hashCode % numPartitio
这是 here 的后续问题。我正在尝试基于此实现 k-means implementation 。它工作得很好,但是我想用reduceByKey()替换groupByKey(),但我不知道如何做(我不
我正在做我在 Spark (Python) 上的第一步,我正在努力使用 groupByKey() 中的迭代器。我无法对这些值求和:我的代码如下所示: example = sc.parallelize(
我有一些看起来像这样的数据: ([('01','A','2016-01-01','8701','123','2016-10-23'),('01','A','2016- 01-01','8701','1
我总是用reduceByKey当我需要在 RDD 中对数据进行分组时,因为它会在对数据进行混洗之前执行 map 侧缩减,这通常意味着更少的数据会被混洗,从而获得更好的性能。即使map端reduce函数
谁能解释一下reducebykey、groupbykey、aggregatebykey和combinebykey之间的区别吗?我已阅读有关此内容的文档,但无法理解确切的差异。 带有示例的解释会很棒。
我有很多这种格式的元组: (1,200,a) (2,300,a) (1,300,b) (2,400,a) (2,500,b) (3,200,a) (3,400,b) (1,500,a) (2,400,
我有一个如下所示的元组列表 ls=[('c', 's'),('c', 'm'), ('c', 'p'), ('h', 'bi'), ('h', 'vi'), ('n', 'l'), ('n', 'nc
我正在尝试使用 Spark 提取邮政编码前缀,但由于尝试使用 org.apache.spark.unsafe.types.UTF8String 作为参数来初始化 java.lang.Double,Sp
我的流数据流管道从 PubSub 提取数据,不会写入 BigQuery,也不会记录任何错误。这些元素进入节点“Write to BigQuery/StreamingInserts/StreamingW
我是一名优秀的程序员,十分优秀!