我有一个类型为(Array[breeze.linalg.DenseVector[Double]], breeze.linalg.DenseVector[Double])
的Spark RDD。我希望将它的关键字平坦化,将其转换为类型为breeze.linalg.DenseVector[Double], breeze.linalg.DenseVector[Double])
的RDD。我目前在做:拼合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
但在这里我需要扁平化的关键。
你能指定'anonymousOrdering'的签名吗?同样在扁平化之后,RDD的类型在你的问题中是相同的。那是故意的吗? –
添加了签名(注释在第一个片段中),我的意图是将包含(Array(1,2),3)的RDD转换为包含(1,3)|的RDD。 (2,3)。在这个例子中,我用整数代替了DenseVector类型。 –