我有要求在数据更改的不同文件夹中读取随机JSON文件。因此,我无法将REGEX应用于读取模式。我知道这些文件是哪些文件,我可以列出它们。但是,当我使用所有文件路径形成字符串时,请尝试在Spark中读取JSON。双引号被%22替换,并且通过火花失败读取文件。有人可以帮忙吗?
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)尝试过,如果您提供单独路径或通配符图案,则可以作为varargs作为varargsjson
方法,即:
sqlContext.read.json("foo/*", "bar/*")
当您在单个字符串中传递多个模式时,Spark试图从它们中构造单个URI,这是不正确的,它将试图将引用字符的引号称为%22。
顺便说一句,试图创建URI是因为您的字符串以双引号开头,这是该位置的非法字符(RFC 3986):
方案名称由一系列字符组成,以
开头 字母,然后是字母,数字和加上
的任何组合 (" "),周期("。")或连字符(" - ")。
在列表中添加路径(ex:pathlist),并按以下
使用spark.Read.option('basepath" basepath).json(pathlist:_*)