我有一个数字文件,每个文件按日期分隔 (date=yyyymmdd)
在亚马逊 s3 上。这些文件可以追溯到 6 个月前,但我想限制我的脚本仅使用最近 3 个月的数据。我不确定是否可以使用正则表达式来做类似 sc.textFile("s3://path_to_dir/yyyy[m1,m2,m3]*")
的事情。
其中 m1,m2,m3 表示从我想使用的当前日期算起的 3 个月。
一项讨论还建议使用类似 sc.textFile("s3://path_to_dir/yyyym1*","s3://path_to_dir/yyyym2*","s3://path_to_dir/yyyym3*")
的内容。但这似乎对我不起作用。
是否sc.textFile( )
使用正则表达式?我知道您可以使用 glob 表达式,但我不确定如何将上述情况表示为 glob 表达式?
最佳答案
对于您的第一个选项,请使用花括号:
sc.textFile("s3://path_to_dir/yyyy{m1,m2,m3}*")
对于第二个选项,您可以将每个单个 glob 读入一个 RDD,然后将这些 RDD 合并为一个:
m1 = sc.textFile("s3://path_to_dir/yyyym1*")
m2 = sc.textFile("s3://path_to_dir/yyyym2*")
m3 = sc.textFile("s3://path_to_dir/yyyym3*")
all = m1.union(m2).union(m3)
您可以将 glob 与
sc.textFile
一起使用但不是完整的正则表达式。
关于regex - pyspark 使用 s3 中的正则表达式/glob 选择文件子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543766/