我应该如何在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路径?的主要内容,如果未能解决你的问题,请参考以下文章

无法从本地文件路径读取文本文件 - Spark CSV 阅读器

如何刷新 HDFS 路径?

Pyspark:获取HDFS路径上的文件/目录列表

spark 可以直接向hdfs 输入数据吗

如何在 Spark 中将文件路径值读取为列?

将数据作为文本文件从 spark 保存到 hdfs