2016-10-24 2 views
0

I habe eine Struktur wie in dem Verzeichnis HDFS folgt,Wie bekomme ich den absoluten Pfad der Endverzeichnisse?

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

die Ordner population, sport, weather & industry entsprechen jeweils unterschiedliche Datenmengen. Die Endordner, z. B. p_1 & p_2, beziehen sich auf andere Datenquellen, falls verfügbar.

Ich arbeite an PySpark-Code, die auf diesen A_1, A_2, B, C_1, C_2, C_3 & D Ordnern (die Endordner) arbeiten. Wie erhalten Sie einen Pfad wie /data/current/ zu Ihrem Code, wie extrahieren Sie die absoluten Pfade nur der Endordner?

Der Befehl hdfs dfs -ls -R /data/current gibt die folgende Ausgabe

/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

Aber ich will mit den absoluten Pfade von End-Ordner landen. Meine Ausgabe sollte wie folgt aussehen

/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

-Danke im Voraus

Antwort

0

Warum nicht einige Code mit HDFS-Client wie SnakeBite schreiben.

Ich bin die Scala-Funktion anhängen, um das gleiche unten zu tun. Diese Funktion nimmt den Stammordner Pfad und gibt eine Liste aller Endpfade. Sie können dasselbe in Python mit SnakeBite tun.

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 
    } 
Verwandte Themen