как я должен выразить путь hdfs в текстовом файле спарк? - PullRequest
3 голосов
/ 15 марта 2019

Я хочу загрузить данные как путь:

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 всех данных

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Попробуйте использовать следующий синтаксис для чередования:

  • {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.

0 голосов
/ 15 марта 2019

Это не совсем ответ, лучше совет / рекомендация, если вы можете контролировать синтаксис пути, попробуйте сохранить ваши пути с разделами даты:

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)

Это наиболее оптимизированный подход, поскольку искровая загрузка именно тех данных, которые ему нужны, не использует обнаружение разделов, а значит, он намного более читабелен.

...