Spark2.0异常:java.net.URISyntaxException: Relative path in absolute URI

本文档详细介绍了在使用Spark2.0时遇到的`java.net.URISyntaxException`异常,该异常通常与绝对URI中的相对路径有关。我们将深入探讨问题的原因,并提供有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

在Intellij IDEA中构建Spark独立应用,使用Spark2.0。需要生成spark上下文,代码如下:
SparkConf conf = new SparkConf().setMaster("local").setAppName("modelPredict");
SparkContext sc = new SparkContext(conf);
使用Spark1.6.1时,这样写是不报错的,换成Spark2.0以后报错如下:
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:D:/Program%20Files/server/apache-tomcat-7.0.68/bin/spark-warehouse
	at org.apache.hadoop.fs.Path.initialize(Path.java:206) ~[hadoop-common-2.2.0.jar:na]
	at org.apache.hadoop.fs.Path.<init>(Path.java:172) ~[hadoop-common-2.2.0.jar:na]
	at org.apache.spark.sql.catalyst.catalog.SessionCatalog.makeQualifiedPath(SessionCatalog.scala:114) ~[spark-catalyst_2.11-2.0.0.jar:2.0.0]
	at org.apache.spark.sql.catalyst.catalog.Sess
### Java中的`IllegalArgumentException`和`URISyntaxException` 在Java编程中,当尝试解析URI字符串时可能会遇到`java.lang.IllegalArgumentException`异常。此异常通常由`java.net.URISyntaxException`引发,后者表示所提供的URI字符串违反了URI语法规范[^2]。 #### URISyntaxException的根本原因 `Relative path in absolute URI`错误表明,在创建绝对URI对象时提供了相对路径部分。根据RFC 2396标准,绝对URI不允许包含相对路径组件。如果试图将相对路径嵌入到绝对URI定义中,则会抛出此类异常[^3]。 以下是可能导致该问题的一些常见场景: 1. **拼接不当的URL字符串** 如果手动构建URI字符串而未遵循严格的格式化规则(例如缺少协议前缀`http://`或`https://`),则可能触发这个异常2. **不合法字符的存在** 某些特殊字符如果没有被正确编码也可能引起类似的解析失败情况。比如空格、百分号等需要转义处理才能安全地用于URI上下文中[^4]。 下面给出一段示例代码展示如何避免这种类型的错误发生: ```java import java.net.URI; import java.net.URISyntaxException; public class Main { public static void main(String[] args) throws URISyntaxException { String url = "http://example.com/path?query=string"; // 正确的例子 try{ new URI(url); System.out.println("Valid URL"); }catch(URISyntaxException e){ System.err.println("Invalid URL: "+e.getMessage()); } String invalidUrl = "/path/only"; // 错误例子:这不是完整的绝对URI try{ new URI(invalidUrl); System.out.println("This line will not execute."); }catch(URISyntaxException e){ System.err.println("Error creating URI :"+e.getMessage()); } } } ``` 以上代码片段展示了两个不同情形下的测试案例——一个是有效的绝对URI地址;另一个则是仅含相对路径而不构成有效绝对形式的情况。通过捕获并打印具体的异常消息可以帮助开发者快速定位具体问题所在之处[^5]。 ### 解决方案建议 为了防止出现上述提到的问题可以采取如下措施之一或者组合应用它们来增强应用程序健壮性: - 始终确保传给`new URI()`方法的是完全合格的标准格式化的字符串表达式; - 使用专门库函数如Apache Commons Validator来进行预验证操作后再实例化实际的对象实体; - 对输入数据执行必要的清理工作包括但不限于去除多余空白符以及对保留字做适当替换等等步骤之前先完成初步筛查过滤过程[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值