【问题标题】:How to use regex to include/exclude some input files in sc.textFile?如何使用正则表达式在 sc.textFile 中包含/排除某些输入文件?
【发布时间】:2015-10-25 07:01:39
【问题描述】:

我尝试使用文件中的 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

知道如何实现吗?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

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

    搜索显示提供给FileInputFormataddInputPathsetInputPath "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]*")
    

    这里不清楚如何使用交替语法,因为逗号用于分隔路径列表(如上所示)。根据zero323的评论,不需要转义:

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

    【讨论】:

    • 谢谢,{a,b} 的替代,不是我尝试的:(a|b)
    • 我试图从某种类型中排除文件,不幸的是,没有成功,你能提供一个例子吗?像 *.^tmp 这样的东西
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多