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
cevap
org.apache.hadoop.fs.FileSystem
'u kullanabilirsiniz. Özellikle,
Ve Spark ile FileSystem.listFiles([path], true)
...
FileSystem.get(sc.hadoopConfiguration()).listFiles(..., true)
Mükemmel, teşekkürler. – Jon
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
Bu, oluşturduğu RemoteIterator'ı kullanarak dosyaların bir listesini nasıl oluşturabilirim? – horatio1701d
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
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())
}
:
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:
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
Tüm alt dizinleri listede yineleyin. Her alt dizin, farklı şekillerde işlemek istediğim bir grup metin dosyası içerir. – Jon