簡體   English   中英

將RDD轉換為PCA的RowMatrix

[英]Transform RDD into RowMatrix for PCA

我擁有的原始數據如下所示:

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()

我不確定該如何解決。

我不完全明白這個問題。 為什么鑰匙很重要? 最大索引值是多少? 在您的代碼中,您確實想使用不同數量的鍵作為索引的最大值,但是我認為這是一個錯誤。

但我假設最大索引值為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開頭。

錯誤“要求失敗”是由於索引和值向量的大小不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM