2014-11-19 27 views
16

HDFS'de bir dizin dizinim var ve dizinler üzerinde yinelemek istiyorum. SparkContext nesnesini kullanarak Spark ile bunu yapmanın kolay bir yolu var mı?Kıvılcım yinelemeli HDFS dizini

+0

Eğer içindeki alt dizinleri ve dosyaların listesini almak gibi 'iterate' demek? veya tüm dosyaları tüm alt dizinlerde mi alıyorsunuz? – maasg

+0

Tüm alt dizinleri listede yineleyin. Her alt dizin, farklı şekillerde işlemek istediğim bir grup metin dosyası içerir. – Jon

cevap

30

org.apache.hadoop.fs.FileSystem'u kullanabilirsiniz. Özellikle,

Ve Spark ile FileSystem.listFiles([path], true) ...

FileSystem.get(sc.hadoopConfiguration()).listFiles(..., true) 

+1

Mükemmel, teşekkürler. – Jon

+0

gerçekten güzel! [Bu soruyu aldım] (http://stackoverflow.com/questions/34738296/spark-spark-submit-jars-arguments-wants-comma-list-how-to-declare-a-directory/35550151#35550151), Bu, orijinal kıvılcım gönderme çağrısında işe yaramaz sanırım – JimLohse

+0

Bu, oluşturduğu RemoteIterator'ı kullanarak dosyaların bir listesini nasıl oluşturabilirim? – horatio1701d

5
import org.apache.hadoop.fs.{FileSystem,Path} 

FileSystem.get(sc.hadoopConfiguration).listStatus(new Path("hdfs:///tmp")).foreach(x => println(x.getPath)) 

Bu benim için çalıştı.

Kıvılcım sürümü 1.5.0-cdh5.5.2

2
Siz de birisi ilgileniyor varsa burada
val listStatus = org.apache.hadoop.fs.FileSystem.get(new URI(url), sc.hadoopConfiguration).globStatus(new org.apache.hadoop.fs.Path(url)) 

     for (urlStatus <- listStatus) { 
     println("urlStatus get Path:"+urlStatus.getPath()) 
} 
4

PySpark versiyonu globStatus durumu ile deneyebilirsiniz

:

hadoop = sc._jvm.org.apache.hadoop 

fs = hadoop.fs.FileSystem 
conf = hadoop.conf.Configuration() 
path = hadoop.fs.Path('/hivewarehouse/disc_mrt.db/unified_fact/') 

for f in fs.get(conf).listStatus(path): 
    print f.getPath() 

Bu Özellikle case disc_mrt.unified_fact Hive tablosunu oluşturan tüm dosyaların listesini alırım.() Dosya boyutunu almak için buraya açıklanan getLen gibi FileStatus nesnesinin

diğer yöntemler:

Class FileStatus