我应该如何在spark文本文件中表达hdfs路径?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该如何在spark文本文件中表达hdfs路径?相关的知识,希望对你有一定的参考价值。
我想加载像路径一样的数据:
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所有数据
答案
尝试使用以下语法进行更改:
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
子目录。
另一答案
如果您能够控制路径语法尝试使用日期分区保存路径,那么这不是更多最佳实践/建议的答案:
hdfs://dcoshdfs/encrypt_data/gmap_info/date=20190519
hdfs://dcoshdfs/encrypt_data/gmap_info/date=20190418
.
.
.
hdfs://dcoshdfs/encrypt_data/gmap_info/date20160101
你可以使用spark简单地提取你想要的东西:
val data = sc.textFile("hdfs://dcoshdfs/encrypt_data/gmap_info")`.where('date >= 20190204L && 'date <= 20190213L)
这是最优化的方法,因为火花加载恰好是它所需的数据并且不使用分区发现,脉冲它更具可读性。
以上是关于我应该如何在spark文本文件中表达hdfs路径?的主要内容,如果未能解决你的问题,请参考以下文章