我尝试使用文件内的 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
知道如何实现这一目标吗?
查看已接受的答案,它似乎使用了某种形式的 glob 语法。它还揭示了该API是Hadoop的暴露
FileInputFormat
。
搜索显示提供给
FileInputFormat
的 addInputPath
或 setInputPath
的路径“可能代表一个文件、一个目录,或者通过使用 glob,代表文件和目录的集合”。也许,SparkContext
也使用这些API来设置路径。
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]}*")
我尝试了上面的方法。我在 GCS 中有 dept_27 和 dept 29 文件夹。我尝试了 dept[27,29] ,但它对我不起作用,因为我相信它会将其视为字面意思并寻找 2,7,9 文件夹。我尝试了 dept{27,29} ,但即使这样也对我不起作用。有人可以建议如何从 GCS 阅读此内容吗?