原始數據我有看起來像這樣:變換成RDD爲RowMatrix PCA
RDD數據:
key -> index
1 -> 2
1 -> 3
1 -> 5
2 -> 1
2 -> 3
2 -> 4
我怎麼能轉換RDD以下格式?
key -> 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: Job aborted due to stage failure: Task 3 in stage 54.0 failed 1 times, most recent failure: Lost task 3.0 in stage 54.0 (TID 75, localhost): java.lang.IllegalArgumentException: requirement failed
當我嘗試使用下面的代碼調試這個程序:
val vectors = filtered_data_by_key.map(x => {
val temp = Array[AnyVal]()
val t = x._2.copyToArray(temp)
(x._1, temp)
})
我發現temp是空的,所以問題在copyToArray()
。
我不知道如何解決這個問題。
它有什麼問題? –
copyToArray方法需要臨時爲類型AnyVal,在我將temp轉換爲AnyVal並調用copyToarray後,結果爲空 –