【发布时间】:2016-08-18 15:48:23
【问题描述】:
我有一个 (Array[breeze.linalg.DenseVector[Double]], breeze.linalg.DenseVector[Double]) 类型的 Spark RDD。我希望将它的键变平以将其转换为breeze.linalg.DenseVector[Double], breeze.linalg.DenseVector[Double]) 类型的 RDD。我目前正在做:
val newRDD = oldRDD.flatMap(ob => anonymousOrdering(ob))
anonymousOrdering() 的签名是String => (Array[DenseVector[Double]], DenseVector[Double])。
它返回type mismatch: required: TraversableOnce[?]。做同样事情的 Python 代码是:
newRDD = oldRDD.flatMap(lambda point: [(tile, point) for tile in anonymousOrdering(point)])
如何在 Scala 中做同样的事情?我一般用flatMapValues但是这里我需要把key压扁。
【问题讨论】:
-
你能指定
anonymousOrdering的签名吗?在展平 RDD 的类型之后,您的问题也是相同的。这是故意的吗? -
签名添加(第一个sn-p中的注释),我的意图是将包含(Array(1, 2), 3)的RDD转换为包含(1, 3)的RDD | (2, 3)。在此示例中,我已将类型 DenseVector 替换为整数。
标签: scala apache-spark flatmap