问题描述:
对于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
原因分析:
未知
解决方案:
希望知道的大佬评论区解答一下,万分感谢