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

ebo*_*oni 20 scala apache-spark

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

我试图做以下事情:

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

这应符合以下要求:

/user/Orders/201507270010033.gz
/user/Orders/201507300060052.gz
Run Code Online (Sandbox Code Playgroud)

知道怎么做到这一点?

nha*_*tdh 53

看看接受的答案,它似乎使用某种形式的glob语法.它还揭示了API是Hadoop的曝光FileInputFormat.

搜索显示提供给FileInputFormat's addInputPathsetInputPath "的路径可能代表文件,目录,或者通过使用glob,文件和目录的集合".也许,SparkContext也使用这些API来设置路径.

glob语法包括:

  • * (匹配0或更多字符)
  • ? (匹配单个字符)
  • [ab] (人物类)
  • [^ab] (否定字符类)
  • [a-b] (字符范围)
  • {a,b} (交替)
  • \c (逃脱角色)

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

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

目前尚不清楚如何使用交替语法,因为逗号用于分隔路径列表(如上所示).根据zero323的评论,没有必要逃脱:

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