我拥有的原始数据如下所示:

RDD数据:

键->索引

1-> 2

1-> 3

1-> 5

2-> 1

2-> 3

2-> 4

如何将RDD转换为以下格式?

键-> index1,index2,index3,index4,index5

1-> 0,1,1,0,1

2-> 1,0,1,1,0

我当前的方法是:

    val vectors = filtered_data_by_key.map( x => {
    var temp = Array[AnyVal]()
    x._2.copyToArray(temp)
    (x._1, Vectors.sparse(filtered_key_size, temp.map(_.asInstanceOf[Int]), Array.fill(filtered_key_size)(1) ))
})

我遇到一些奇怪的错误:

org.apache.spark.SparkException:由于阶段失败而导致作业中止:54.0阶段中的任务3失败了1次,最近一次失败:54.0阶段中的任务3.0丢失(TID 75,本地主机):java.lang.IllegalArgumentException:要求失败

当我尝试使用以下代码调试该程序时:

val vectors = filtered_data_by_key.map( x => {
    val temp = Array[AnyVal]()
    val t = x._2.copyToArray(temp)
    (x._1, temp)
})

我发现temp为空,所以问题出在copyToArray()

我不确定该如何解决。

#1楼 票数:1 已采纳

我不完全明白这个问题。 为什么钥匙很重要? 最大索引值是多少? 在您的代码中,您确实想使用不同数量的键作为索引的最大值,但是我认为这是一个错误。

但我假设最大索引值为5。在这种情况下,我相信这就是您要寻找的内容:

val vectors = data_by_key.map({case(k,it)=>Vectors.sparse(5,it.map(x=>x-1).toArray,
        Array.fill(it.size)(1))})

val rm = new RowMatrix(vectors)

我将索引号减少了一个,因为它们应该以0开头。

错误“要求失败”是由于索引和值向量的大小不同。

  ask by Jiang Xiang translate from so

未解决问题?本站智能推荐:

1回复

Spark将数据帧转换为RowMatrix

假设我有一系列转换产生的数据框。 看起来如下: 每行实际上对应于矩阵的一行。 如何将数据框的matrixRow列转换为RowMatrix?
1回复

如何将RowMatrix转换为本地Matrix?

我在Spark中有关于矩阵的问题。 假设我有一个名为X的RowMatrix如下所示: 现在,我要做的是将此RowMatrix与RowMatrix X的转置版本RowMatrix 。 现在,就我所知,我不能将RowMatrix与另一个RowMatrix ,它必须是RowMat
2回复

使用Scala将Matrix中的Matrix转换为RowMatrix

我真的想将我的org.apache.spark.mllib.linalg.Matrix转换为org.apache.spark.mllib.linalg.distributed.RowMatrix 我可以这样做: 然而,这真的很糟糕,而且完全是黑客攻击。 有人能告诉我一个更好的方法
1回复

将rdd转换为pairRDD

这是一个新手问题。 是否有可能将具有动态维度的RDD (key,1,2,3,4,5,5,666,789,...)转换为对象RDD (key,1,2,3,4,5,5,666,789,...)如(key, (1,2,3,4,5,5,666,789,...)) ? 我觉得这应该是超级容易但
1回复

将RDD [CassandraRow]转换为RDD [String]

是否可以将RDD [CassandraRow]转换为RDD [String]? 如果是这样,使用转换后的RDD是否有任何不利之处?
1回复

如何将Option [RDD]转换为RDD [重复]

这个问题已经在这里有了答案: Scala Map#get和Some()的返回 2个答案 我使用以下一些密钥将RDD存储到可变的Hashmap中。 现在,我试图从Hashmap获取相同的rdd,并返回Option [RDD [T]],如下所示 这给了类
2回复

将Rdd [Vector]转换为Rdd [Double]

如何将csv转换为Rdd [Double]? 我有一个错误:无法在此行上应用于(org.apache.spark.rdd.RDD [Unit]): 我的完整代码在这里:
1回复

将RDD [(Long,Long)]转换为RDD [Row]

如何将RDD [(Long,Long)]转换为RDD [Row]? 我需要RDD [Row]转换为DataFrame。 我最接近答案的是如何将RDD [Row]转换为RDD [Vector],但我想做相反的事情。