问题描述:
spark python中使用 CoordinateMatrix
的时候出现
java.lang.IllegalArgumentException: requirement failed: Found duplicate indices: 766.
原因分析:
在矩阵的输入文件中,存在重复的值,这是由于原数据hash冲突引起的,哈希冲突存在是正常的。
解决方案:
去除重复元素
使用如下方法
https://www.cnblogs.com/yunlongaimeng/p/8728647.html
# 去重成功
>>>li3 = [(0, 0, 1.2), (1, 0, 2.1), (2, 1, 3.7), (0, 0, 1.2), (0, 0, 1.2)]
>>>{}.fromkeys(li3).keys()
>>>[(1, 0, 2.1), (2, 1, 3.7), (0, 0, 1.2)]
⚠️注意,使用MatrixEntry(0, 0, 1.2)
无法去重!
例子:
>>> li5 = [MatrixEntry(0, 0, 1.2), MatrixEntry(0, 0, 1.2), MatrixEntry(1, 0, 2.1), MatrixEntry(2, 1, 3.7)]
>>> li5
[MatrixEntry(0, 0, 1.2), MatrixEntry(0, 0, 1.2), MatrixEntry(1, 0, 2.1), MatrixEntry(2, 1, 3.7)]
>>> {}.fromkeys(li5).keys()
[MatrixEntry(0, 0, 1.2), MatrixEntry(2, 1, 3.7), MatrixEntry(0, 0, 1.2), MatrixEntry(1, 0, 2.1)]
>>># 可见没有去重成功
所以必须使用下面第二种方法构造
entries = sc.parallelize([MatrixEntry(0, 0, 1.2), MatrixEntry(1, 0, 2.1), MatrixEntry(2, 1, 3.7)])
# - or using (long, long, float) tuples:
entries = sc.parallelize([(0, 0, 1.2), (1, 0, 2.1), (2, 1, 3.7)])