问题描述:
我有一个大约3500 万行和10 列的数据集。
我想计算两行之间的距离distance(row1,row2)
,距离函数喜欢,然后将值存储在一个巨大的矩阵中。
完全需要的操作接近6*10^15,我认为这是非常大的。
我试过的:
df.collect()
并得到一个 array1 :array[Row]
array1
成对遍历并计算距离distance(rowi,rowj)
在矩阵(I,J)斯卡拉代码:
val array1 = df.collect()
val l = array1.length
for(i <-0 until array.length){
for(j <-i+1 until array.length){
val vd = Vectors.dense(i,j,distance(array(i),array(j)))
我想像上面一样将每个值保存在 Vector 中,并将其添加到 RDD/Dataframe。
但我搜索过的唯一方法是使用union
。我认为这还不够好。
所以需要解决三个问题:
collect
是一个动作函数,df.collect()
会抛出 Exception java.lang.OutOf.MemoryError : Java heap space
。这可以避免吗?distance(rowi,rowj)
,就想存起来,怎么办?ps:如果以上都不能解决,我可以使用哪个新想法?
任何答案都会对我有很大帮助,谢谢!
检查https://spark.apache.org/docs/latest/mllib-data-types.html#indexedrowmatrix IndexedRowMatrix。IndexedRowMatrix 类似于 RowMatrix,但具有有意义的行索引。您可以基于此 API 设计算法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句