我需要读取数据已更改的不同文件夹中的随机json文件。所以我不能将正则表达式应用于读取pattern。我知道哪些文件可以列出,但是当我用所有文件路径组成字符串并尝试在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
答案 0 :(得分:0)
我刚刚使用较旧版本的Spark(1.6.0)进行了尝试,如果您将{em> 路径或通配符模式作为varargs提供给json
方法,则它会很好地工作,即:
sqlContext.read.json("foo/*", "bar/*")
当您在单个字符串中传递多个模式时,Spark尝试从中构造单个URI,这是不正确的,并且它将尝试对引号字符进行URL编码为%22。
顺便说一句,尝试创建URI失败,因为您的字符串以双引号开头,这是该位置的非法字符(RFC 3986):
方案名称由一系列以a
开头的字符组成 字母,后跟字母,数字和加号的任意组合
(“ +”),句点(“。”)或连字符(“-”)。