Spark读取多个文件:双引号替换为%22

问题描述 投票:0回答:1

我有要求在数据已更改的不同文件夹中读取随机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/*"

现在,当我使用此变量读取json文件时,它会失败并显示错误,并且引号将替换为%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

json scala apache-spark apache-spark-sql rdd
1个回答
0
投票

我刚刚尝试使用较旧版本的Spark(1.6.0),如果你为json方法提供单独的路径或通配符模式作为varargs,它可以正常工作,即:

sqlContext.read.json("foo/*", "bar/*")

当您在单个字符串中传递多个模式时,Spark会尝试从它们构造单个URI,这是不正确的,并且它将尝试对引号字符进行URL编码为%22。

顺便说一下,尝试创建URI是失败的,因为你的字符串以双引号开头,这是该位置的非法字符(RFC 3986):

方案名称由一系列以a开头的字符组成 字母后面跟着字母,数字,加号的任意组合 (“+”),句号(“。”)或连字符(“ - ”)。

© www.soinside.com 2019 - 2024. All rights reserved.