2016-10-24 3 views
0

У меня есть структура каталогов следующим образом в HDFS,Как получить абсолютные пути конечных каталогов?

/data/current/population/{p_1,p_2} /data/current/sport /data/current/weather/{w_1,w_2,w_3} /data/current/industry

The папки population, sport, weather & industry каждая соответствует различному набору данных. Конечные папки, например p_1 & p_2, относятся к различным источникам данных, если они доступны.

Я работаю над кодом PySpark, который работает с этими папками A_1, A_2, B, C_1, C_2, C_3 & D (конечными папками). Учитывая путь, как /data/current/ к вашему коду, как вы извлекаете абсолютные пути только конечных папок?

Команда hdfs dfs -ls -R /data/current дает следующий вывод

/data/current /data/current/population /data/current/population/p_1 /data/current/population/p_2 /data/current/sport /data/current/weather /data/current/weather/w_1 /data/current/weather/w_2 /data/current/weather/w_3 /data/current/industry

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

/data/current/population/p_1 /data/current/population/p_2 /data/current/sport /data/current/weather/w_1 /data/current/weather/w_2 /data/current/weather/w_3 /data/current/industry

-Спасибо заранее

ответ

0

Почему вы не пишете код, используя HDFS клиента как Snakebite.

У меня есть функция scala, чтобы сделать то же самое ниже. Эта функция принимает путь корневой папки и дает список всех конечных путей. Вы можете сделать то же самое в python, используя SnakeBite.

def traverse(path: Path, col: ListBuffer[String]): ListBuffer[String] = { 
     val stats = fs.listStatus(path) 
     for (stat <- stats) { 
     if (stat.isFile()) { 
      col += stat.getPath.toString() 
     } else { 
      val nl = fs.listStatus(stat.getPath) 
      if (nl.isEmpty) 
      col += stat.getPath.toString() 
      else { 
      for (n <- nl) { 
       if (n.isFile) { 
       col += n.getPath.toString() 
       } else { 
       col ++= traverse(n.getPath, new ListBuffer) 
       } 
      } 
      } 
     } 
     } 

     col 
    } 
Смежные вопросы