json - Spark 读取多个文件:双引号替换为 %22
问题描述
我需要读取数据已更改的不同文件夹中的随机 json 文件。所以我不能应用正则表达式来阅读模式。我知道哪些是那些文件,我可以列出它们。但是当我用所有文件路径形成字符串并尝试在 spark 中读取 json 时。双引号被替换为 %22 并且通过 spark 读取文件失败。有人可以帮忙吗?
val FilePath = "\"/path/2019/02/01/*\"" + ","+ "\"path/2019/02/05/*\"" + "\"path/2019/02/24/*\""
FilePath:String = "path/2019/02/20/*","path/2019/02/05/*","path/2019/02/24/*"
现在,当我使用此变量读取 josn 文件时,它会因错误而失败,并且引号被替换为 %22。
spark.read.json(FilePath)
java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in scheme name at index 0: "/path/2019/02/01/*%22,%22/path/2019/02/05/*%22,%22/path/2019/02/24/*%22
解决方案
我刚刚用旧版本的 Spark (1.6.0) 尝试了这个,如果你提供单独的路径或通配符模式作为json
方法的可变参数,它工作正常,即:
sqlContext.read.json("foo/*", "bar/*")
当您在单个字符串中传递多个模式时,Spark 会尝试从它们构造单个 URI,这是不正确的,它会尝试将引号字符 URL 编码为 %22。
顺便说一句,尝试创建 URI 失败,因为您的字符串以双引号开头,这是该位置的非法字符(RFC 3986):
方案名称由一系列字符组成,以
字母开头,后跟字母、数字、加号
("+")、句点 (".") 或连字符 ("-") 的任意组合。
推荐阅读
- macos - 如何在mac终端中创建一个循环以相反的顺序触摸文件
- regex - Oracle 18c - REGEXP_REPLACE 的替代品
- javascript - 如何从 Javascript 中的 vuetify 多选 v-autocomplete 中选择(复选框)一个值?
- algorithm - 将循环分成更小的部分
- html - 如何延迟 Angular doCheck 执行,直到用户的值完全输入到输入中?
- python - 如何在树形图上添加 % 信息?
- r - How to create a binary variable for logistic regression by using key words in text variable
- excel - 我想用一个变量来引用一个控制对象
- vb.net - 2个PDF MemorStreams的iText7合并不起作用
- sql-server - SQL Server - 在 TRANSACTION 上设置超时/自动回滚