2012-06-08 16 views
7

Dört sonuç üreten bir PIG Komut Dosyası sahibiyim Hepsini tek bir dosyada saklamak istiyorum. UNION kullanmayı denedim, ancak UNION kullandığımda dört dosya bölümü m-00000, part-m-00001, part-m-00002, part-m-00003. Tek bir dosya alabiliyor muyum? İşte PIG'deki UNION sonuçlarını tek bir dosyada saklamak

yukarıda da belirtildiği gibi ben 4 dosyaları elde AA klasörü içinde PIG komut

A = UNION Message_1,Message_2,Message_3,Message_4 into 'AA'; 

olduğunu. İçinde tüm girişleri olan tek bir dosya alıyorum değil mi?

cevap

12

Domuz burada doğru şeyi yapıyor ve veri setleri unioning edilir. Tek bir dosya, Hadoop'ta bir veri kümesi anlamına gelmez ... Hadoop'taki bir veri kümesi genellikle bir klasördür. Burada bir azaltmaya gerek olmadığı için, bu gitmeyecek.

Bir Harita Çalıştırmak ve Azaltmak için Domuzu kandırmanız gerekir. Bunu genelde yoludur: o zaman

set default_parallel 1 

... 
A = UNION Message_1,Message_2,Message_3,Message_4; 
B = GROUP A BY 1; -- group ALL of the records together 
C = FOREACH B GENERATE FLATTEN(A); 
... 

GROUP BY birlikte gruplar kayıtların hepsi ve tekrar dışarı listelemek FLATTEN patlar. (Bu yeni olarak HDF'ler dışarı geri yazmanın metnin tamamını bitiştirmek ve

$ hadoop fs -cat msg1.txt msg2.txt msg3.txt msg4.txt | hadoop fs -put - union.txt 

: Burada dikkat edilmesi gereken


Bir şey bunu çok farklı olmadığıdır dosya)

Bu hiç de paralel değildir, ancak tüm verileriniz bir redüktörle hunileştirilmez.

+3

Ayrıca, global 'default_parallel' ayarını yapmak yerine' GROUP ... BY 1 parallel 1 'öğesini de yapabilirsiniz. –

1

Default_parallel özelliğini ayarlamayı denediniz mi?

grunt> set default_parallel 1 
grunt> A = UNION Message_1,Message_2,Message_3,Message_4; 
+0

Hayır, hala 4 dosya veriyor. Bu satırı kullandım, grunt> set default_parallel 1 Domuz özellikleriyle ilgili daha fazla bir şey yapmalı mıyım? – Uno

+0

Bu yalnızca bir haritadır, yani "default_parallel" ayarı yalnızca azaltma aşamasını etkilediğinden çalışmayacaktır. Bu, daha büyük bir işin parçasıysa, betiği son işin bir azaltma işi olduğu şekilde yazmayı deneyebilir ve daha sonra bu işten önce 'default_parallel 'öğesini' 1' olarak ayarlayabilir, sonra işe yarayacaktır. –

İlgili konular