Databricks中PySpark读取带日期戳JSON文件时遇绝对URI相对路径错误
解决Databricks中Spark读取JSON文件时的URISyntaxException错误
遇到这个IllegalArgumentException: 'java.net.URISyntaxException: Relative path in absolute URI'错误,大概率是路径格式不正确或者Spark解析路径时的特殊字符处理问题,我给你几个针对性的解决方案:
1. 补全DBFS路径前缀
你当前使用的路径mnt/data/2017-08-17/06/*.json缺少了Databricks文件系统(DBFS)的标准前缀dbfs:/。Spark会把没有前缀的路径当作本地文件系统的相对路径,进而引发URI解析错误。修改路径为:
t = 'dbfs:/mnt/data/2017-08-17/06/*.json' rdf = spark.read.load(t, 'json')
这是最常见的解决方法,绝大多数情况下补全前缀就能解决问题。
2. 处理multiline参数的场景
如果你需要启用multiline参数读取多行JSON文件,确保路径格式正确的同时,还可以指定pathGlobFilter来过滤文件,避免通配符解析问题:
rdf = spark.read.format('json') \ .option('multiline', 'true') \ .option('pathGlobFilter', '*.json') \ .load('dbfs:/mnt/data/2017-08-17/06/')
这种方式通过参数指定过滤规则,替代直接在路径中使用通配符,能规避部分URI解析的异常。
3. 检查文件名中的特殊字符
如果你的JSON文件名包含特殊字符(比如你错误信息里的2017-08-17T06:01:02Z-077d951a-3848-422b-9a4c-a3b648dde0ac.json里的T、Z和连字符),虽然Spark通常能处理这类文件名,但可以尝试通过兼容旧路径解析逻辑的参数来解决:
spark.conf.set("spark.sql.legacy.pathOptionBehavior.enabled", "true") rdf = spark.read.load('dbfs:/mnt/data/2017-08-17/06/*.json', 'json')
先从第一种方案试起,这应该能解决你遇到的问题。
内容的提问来源于stack exchange,提问作者Johny Mudly
相关产品推荐
相关产品推荐

