对于CoordinateMatrix使用toRowMatrix()转换后,行数变少的问题(行粘连)

问题描述:

对于mat = CoordinateMatrix(entries)mat 使用rowMat = mat.toRowMatrix() 转换后,行数变少。
通过进一步查看rowMat发现,出现了几行粘连的情况:
在这里插入图片描述
程序代码如下:

    rowNum = 0
    colNum = 0
    valNum = 0
    mtxEntries = []
    with open("A.out") as fileA:
        [rowNum_S, colNum_S, valNum_S] = fileA.readline().split(" ")
        rowNum = int(rowNum_S)
        colNum = int(colNum_S)
        valNum = int(valNum_S)
        for i in range(valNum):
            tmp = fileA.readline().split(" ")
            tmpMtxEntry = (long(tmp[0]), long(tmp[1]), float(tmp[2]))
            mtxEntries.append(tmpMtxEntry)
    print(len(mtxEntries)) #16698
    mtxEntries = {}.fromkeys(mtxEntries).keys() #去除重复数据,不然会出现duplicate index问题
    print(len(mtxEntries)) #16694,看来有4个重复数据
    entries = sc.parallelize(mtxEntries)
    mat = CoordinateMatrix(entries)
    print("mat.numRows: %d" %mat.numRows())#5888,为正确值
    print("mat.numCols: %d" %mat.numCols())#5566,为正确值
    rowMat = mat.toRowMatrix()
    print("rowMat.numRows: %d" %rowMat.numRows()) #5531,突然就少了好多行
    print("rowMat.numCols: %d" %rowMat.numCols()) #5566,为正确值
    ARowsRdd = rowMat.rows 
    def f(x): print(x)
    print(ARowsRdd.foreach(f))#打印出来,就是上面第一幅图那样,有粘连的数据行

A.out存储的是矩阵的稀疏表示
部分样例:

5888 5566 16698    #第一行表示矩阵的(总行数,总列数,该文件下面一共还有多少行【即矩阵非零项个数】)
1412 0 1 		   # (row, col, val):矩阵第1412行,第0列,值为1
1206 0 1
464 0 1
4679 1 1
1571 1 1
495 1 1
2542 2 1
2080 2 1
4769 2 1

原因分析:

未知

解决方案:

希望知道的大佬评论区解答一下,万分感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值