Spark: чтение фрейма данных из списка путей с пустым путем - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь загрузить фрейм данных из списка путей в спарк. Если файл существует во всех упомянутых путях, то код работает нормально. Если хотя бы один путь пуст, значит выдается ошибка.

Это мой код:

val paths = List("path1", "path2")
val df = spark.read.json(paths: _*)

Я посмотрел другие варианты.

  1. Создайте одну строку регулярного выражения, которая содержит все пути.
  2. Построение списка из основного списка путей, проверяя, может ли спарк читать или нет.

.

for(path <- paths) {
  if(Try(spark.read.json(path)).isSuccess) {
    //add path to list
  }
}

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

Пожалуйста, предложите подход для решения этой проблемы.

Примечание:

  1. Все пути в формате hdf
  2. Каждый путь сам по себе является строкой регулярного выражения, которая будет считываться из нескольких файлов

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Как уже упоминалось в комментариях, вы можете использовать HDFS FileSystem API, чтобы получить список путей, существующих на основе вашего регулярного выражения (если это действительное регулярное выражение).

import org.apache.hadoop.fs._

val path = Array("path_prefix/folder1[2-8]/*", "path_prefix/folder2[2-8]/*")

val fs: FileSystem = FileSystem.get(sc.hadoopConfiguration)  // sc = SparkContext

val paths = path.flatMap(p => fs.globStatus(new Path(p)).map(_.getPath.toString))

Таким образом, даже если, скажем, /path_prefix/folder13 пусто, его содержимое не будет перечислено в переменной paths, которая будет Array[String], содержащей все доступные файлы в регулярном выражении.

Наконец, вы можете сделать:

spark.read.json(paths : _*)
0 голосов
/ 04 сентября 2018

Добавить, скопировать фиктивный файл с длиной 0 в каталоги в списке путей - это прагматичная техническая работа, которая функционально приравнивается к тому, что вы хотите сделать. Проблема с пустым каталогом, с которой я сталкивался ранее и которая устранена таким образом, может оказаться для вас невозможной ...

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