我想像path那样加载数据:
hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-04/*/*
hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-05/*/*
hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-06/*/*
hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-07/*/*
...
hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-14/*/*`这是我的密码
val data = sc.textFile("hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-"+"1[0-3]".r+"/*/*")`和
val data = sc.textFile("hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-"+"0[4-9]".r+"/*/*")两者都可以,但是
val data = sc.textFile("hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-"+"0[0-9]|1[0-4]".r+"/*/*")不工作
如何编写路径模式来加载04-13所有数据?
发布于 2019-03-15 15:13:36
尝试使用以下语法进行替换:
{a,b}而不是(a|b)因此,在您的示例中,文本文件的加载如下所示:
val data = sc.textFile("hdfs://dcoshdfs/encrypt_data/gmap_info/2019-02-{0[4-9],1[0-3]}/*/*")将所有文件从2019-02-04加载到2019-02-13子目录。
发布于 2019-03-15 20:42:35
如果您能够控制path语法,尝试使用日期分区保存路径,那么这并不完全是一个最佳实践/建议:
hdfs://dcoshdfs/encrypt_data/gmap_info/date=20190519
hdfs://dcoshdfs/encrypt_data/gmap_info/date=20190418
.
.
.
hdfs://dcoshdfs/encrypt_data/gmap_info/date20160101你可以用火花来提取你想要的东西:
val data = sc.textFile("hdfs://dcoshdfs/encrypt_data/gmap_info")`.where('date >= 20190204L && 'date <= 20190213L)这是最优化的方法,因为火花加载准确的数据,它需要和不使用分区发现,脉冲它是更可读的。
https://stackoverflow.com/questions/55179978
复制相似问题