如何使用正则表达式在sc.textFile中包含/排除一些输入文件?

时间:2015-08-03 08:33:07

标签: scala apache-spark

我试图使用文件中的Apache spark过滤掉特定文件的日期到RDD函数sc.textFile()

我试图执行以下操作:

sc.textFile("/user/Orders/201507(2[7-9]{1}|3[0-1]{1})*")

这应符合以下条件:

/user/Orders/201507270010033.gz
/user/Orders/201507300060052.gz

知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:48)

the accepted answer,它似乎使用某种形式的glob语法。它还揭示了API是Hadoop FileInputFormat的曝光。

搜索会显示提供给FileInputFormat addInputPathsetInputPath "may represent a file, a directory, or, by using glob, a collection of files and directories"的路径。也许,SparkContext也使用这些API来设置路径。

syntax of the glob包括:

  • *(匹配0个或更多字符)
  • ?(匹配单个字符)
  • [ab](角色等级)
  • [^ab](否定字符类)
  • [a-b](字符范围)
  • {a,b}(更改)
  • \c(转义字符)

按照接受的答案中的示例,可以将路径写为:

sc.textFile("/user/Orders/2015072[7-9]*,/user/Orders/2015073[0-1]*")

目前尚不清楚如何使用交替语法,因为逗号用于分隔路径列表(如上所示)。根据{{​​3}}的评论,不需要转义:

sc.textFile("/user/Orders/201507{2[7-9],3[0-1]}*")