10

豚からCSVにデータを取得して、ExcelやSQL(またはRやSPSSなど)で多くの操作を行わなくても使用できるようにするのに多くの問題があります...

次の関数を使用してみました。

STORE pig_object INTO '/Users/Name/Folder/pig_object.csv'
    USING CSVExcelStorage(',','NO_MULTILINE','WINDOWS');

たくさんのpart-m-0000#ファイルを含むその名前のフォルダを作成します。後でcatpart*> filename.csvを使用してそれらすべてを結合できますが、ヘッダーがないため、手動で挿入する必要があります。

PigStorageSchemaはヘッダー付きの別のビットを作成することになっていることを読みましたが、まったく機能していないようです。たとえば、ヘッダーファイルがなく、保存されたばかりの場合と同じ結果が得られます。STORE pig_object INTO'/ Users / Name / Folder / pig_object'USING org.apache.pig.piggybank.storage.PigStorageSchema();

(私はこれをローカルモードとmapreduceモードの両方で試しました)。

これらの複数の手順を使用せずに、Pigから単純なCSVファイルにデータを取得する方法はありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

32

仕事をするワンライナーはないのではないかと思いますが、次のことを思いつくことができます(Pig v0.10.0):

A = load '/user/hadoop/csvinput/somedata.txt' using PigStorage(',') 
      as (firstname:chararray, lastname:chararray, age:int, location:chararray);
store A into '/user/hadoop/csvoutput' using PigStorage('\t','-schema');

PigStorageが' 'を取得すると、出力ディレクトリに''と''-schemaが作成されます。次に、' 'を''とマージする必要があります:.pig_schema.pig_header.pig_headerpart-x-xxxxx

1.結果をローカルディスクにコピーする必要がある場合:

hadoop fs -rm /user/hadoop/csvoutput/.pig_schema
hadoop fs -getmerge /user/hadoop/csvoutput ./output.csv

(入力ディレクトリを取るので、最初-getmergeに取り除く必要があります).pig_schema

2.結果をHDFSに保存します。

hadoop fs -cat /user/hadoop/csvoutput/.pig_header 
  /user/hadoop/csvoutput/part-x-xxxxx | 
    hadoop fs -put - /user/hadoop/csvoutput/result/output.csv

詳細については、次の投稿も参照してください
。単一のCSVに出力を保存しますか?
Hadoop FSシェルを使用して、Hadoop内の2つのファイルを1つに連結するにはどうすればよいですか?

于 2012-12-04T12:03:26.123 に答える
1

データをPigStorageHDFSに保存し、次を使用してマージする場合-getmerge -nl

STORE pig_object INTO '/user/hadoop/csvoutput/pig_object'
    using PigStorage('\t','-schema');
fs -getmerge -nl /user/hadoop/csvoutput/pig_object  /Users/Name/Folder/pig_object.csv;

ドキュメント:

オプションで、-nlを設定して、各ファイルの最後に改行文字(LF)を追加できるようにすることができます。

次の構造の単一のTSV/CSVファイルが作成されます。

1 - header
2 - empty line
3 - pig schema
4 - empty line
5 - 1st line of DATA
6 - 2nd line of DATA
...

[2,3,4]したがって、AWKを使用して行を簡単に削除できます。

awk 'NR==1 || NR>4 {print}' /Users/Name/Folder/pig_object.csv > /Users/Name/Folder/pig_object_clean.csv
于 2016-04-26T16:56:50.163 に答える