2013-05-08 12 views
6

Dosya girdisi olarak, dosya girdisi olarak ayarladım. arg[0]+"/*/*/*", hiçbir dosyayla eşleşmediğini söyledi.Birden çok dizinden ve dosyadan dosya alınıyor olabilir

ne istiyorum gibi birden dosyalarından okumaktır:

 
Directory1 
---Directory11 
    ---Directory111 
     --f1.txt 
     --f2.txt 
---Directory12 
Directory2 
---Directory21 

o Hadoop'un mümkündür? Teşekkürler!

cevap

3

Birden çok dizin ve dosyadan gelen bilgileri ***** operatörü kullanarak alabilirsiniz. Büyük olasılıkla çünkü "arg [0]" argümanı doğru değildir ve bu yüzden dosyaları bulamıyor.

Alternatif olarak, InputFormat.addInputPath özelliğini de kullanabilirsiniz ya da ayrı biçimlere veya mappers'a ihtiyacınız varsa MultipleInputs sınıfı kullanılabilir. Temel bir yol Burada

FileInputFormat.addInputPath(job, myInputPath); 

ekleme

Örnek, Hadoop to reduce from multiple input formats Bu, diğer bir soru da çok benzer MultipleInputs

MultipleInputs.addInputPath(job, inputPath1, TextInputFormat.class, MyMapper.class); 
MultipleInputs.addInputPath(job, inputPath2, TextInputFormat.class, MyOtherMapper.class); 

bir örneğidir ve iyi cevap vermektedir.

+0

Bu nedenle, bir klasör içindeki birden çok klasörden ve alt klasörün her birindeki yinelenen dosyaları okuyacaktır. – JudyJiang

+0

Yanıldım ve bunu yansıtmak için cevabımı güncelledim. "Arg [0]" ın yanlış olduğunu tahmin ediyorum. Bunu nereden kullanıyorsun? eğer komut satırı $ arg [0] 'a ihtiyaç duyabiliyorsa, eğer koddan geliyorsa çoklu girişleri kullanmalısınız – greedybuddha

+0

Bu benim java kodumda. FileInputFormat.setInputPaths (conf, new Path (args [0]) kullandım, args [0] ve ondan sonra birden çok dizin parçası değiştirmem gereken bir şey var mı? – JudyJiang

İlgili konular