java.lang.IllegalArgumentException: requirement failed: Found duplicate indices: 766.

问题描述:

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)])
### Java中的`IllegalArgumentException` 在Java编程语言中,`java.lang.IllegalArgumentException` 是一种运行时异常,通常由方法抛出以指示传递给该方法的参数不合法或不合适。当程序试图执行某些操作而这些操作依赖于不符合预期条件的输入数据时,可能会引发此异常。 对于提到的“illegal sequence boundaries”,这可能涉及字符串处理或其他需要定义有效范围的操作场景。如果指定的起始索引小于零、大于字符串长度或者结束索引超出字符串的实际大小,则会触发此类错误[^1]。 以下是针对这一特定问题的原因分析以及解决办法: #### 原因分析 - **非法边界值**:当尝试访问子串(substring)、数组片段或者其他具有明确界限的数据结构部分时,提供了不合逻辑的起点或终点位置。 - **参数验证失败**:调用方传入的方法参数未能满足接收方设定的前提约束条件,比如正则表达式的模式匹配过程中遇到无法解析的部分。 #### 解决方案 为了防止由于非法序列边界而导致的 `IllegalArgumentException` ,可以采取如下措施之一来增强代码健壮性和安全性: 1. **预检查参数合法性** 在实际业务逻辑之前增加必要的校验步骤,确保所有外部可控变量均处于合理区间内再继续后续流程。 2. **捕获并妥善处理异常** 使用 try-catch 结构包裹潜在风险区域,并通过日志记录具体错误信息以便调试定位问题根源所在。 下面给出一段示范性的防护代码示例: ```java public class SafeSubstring { public static String safeGetSubstring(String str, int beginIndex, int endIndex){ if(str == null || beginIndex < 0 || endIndex > str.length() || beginIndex >= endIndex ){ throw new IllegalArgumentException("Invalid arguments for substring operation."); } return str.substring(beginIndex,endIndex); } public static void main(String[] args) { try{ System.out.println(safeGetSubstring("HelloWorld",5,8)); }catch(IllegalArgumentException e){ System.err.println(e.getMessage()); } } } ``` 以上代码展示了如何安全地获取字符串的一部分而不必担心越界等问题的发生。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值