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

时间:2019-02-26 10:23:43

标签: json scala apache-spark apache-spark-sql rdd

我需要读取数据已更改的不同文件夹中的随机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

1 个答案:

答案 0 :(得分:0)

我刚刚使用较旧版本的Spark(1.6.0)进行了尝试,如果您将{em> 路径或通配符模式作为varargs提供给json方法,则它会很好地工作,即:

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

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

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

  

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