我有一个方形的pyspark RowMatrix ,看起来像这样: 我想运行pyspark.ml.feature.PCA ,但它的fit()方法只接受一个DataFrame 。 有没有办法将此RowMatrix转换为DataFrame ? 或者有更好的方法吗? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我拥有的原始数据如下所示:
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.