Подтвердить что ты не робот

Как использовать регулярное выражение для включения/исключения некоторых входных файлов в sc.textFile?

Я попытался отфильтровать даты для определенных файлов, используя искру Apache внутри файла, в функцию RDD sc.textFile().

Я попытался сделать следующее:

sc.textFile("/user/Orders/201507(2[7-9]{1}|3[0-1]{1})*")

Это должно соответствовать следующему:

/user/Orders/201507270010033.gz
/user/Orders/201507300060052.gz

Любая идея, как достичь этого?

4b9b3361

Ответ 1

Глядя на принятый ответ, он, похоже, использует синтаксис некоторой формы glob. Он также показывает, что API является объектом Hadoop FileInputFormat.

Поиск показывает, что пути, переданные в FileInputFormat addInputPath или setInputPath могут представлять файл, каталог или, используя glob, сбор файлов и каталогов ". Возможно, SparkContext также использует эти API для установки пути.

Синтаксис glob включает в себя:

  • * (соответствует 0 или более символу)
  • ? (соответствует одному символу)
  • [ab] (класс символов)
  • [^ab] (отрицательный класс символов)
  • [a-b] (диапазон символов)
  • {a,b} (чередование)
  • \c (escape-символ)

Следуя примеру в принятом ответе, вы можете написать свой путь как:

sc.textFile("/user/Orders/2015072[7-9]*,/user/Orders/2015073[0-1]*")

Непонятно, как здесь можно использовать синтаксис чередования, поскольку запятая используется для разграничения списка путей (как показано выше). Согласно комментарию zero323, не требуется экранирование:

sc.textFile("/user/Orders/201507{2[7-9],3[0-1]}*")