5

Hadoop mapreduce で分析する csv ファイルがあります。Hadoop が行ごとに解析するかどうか疑問に思っていますか? はいの場合、コンマで区切られた文字列を使用して、分析したいフィールドを取得します。またはcsvを解析してhadoopにフィードする他のより良い方法はありますか? ファイルは 10 GB で、カンマ区切りです。Hadoop で Java を使用したい。以下の map() メソッドの Tex 型のパラメーター「値」には、Map/Reduce? によって解析される各行が含まれます。――ここが一番迷っています。

これは私のコードです:

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    try {
       String[] tokens = value.toString().split(",");

       String crimeType = tokens[5].trim();      
       int year = Integer.parseInt(tokens[17].trim()); 

       context.write(crimeType, year);

     } catch (Exception e) {...}
 }
4

3 に答える 3

4

はい。Hadoop はデフォルトで、入力ファイルからマッパーに 1 行ずつフィードするテキスト入力リーダーを使用します。マッパーのキーは、読み取った行のオフセットです。ただし、単一の列/フィールドに改行が含まれている可能性があるため、CSV ファイルには注意してください。次のような CSV 入力リーダーを探してください: https://github.com/mvallebr/CSVInputFormat/blob/master/src/main/java/org/apache/hadoop/mapreduce/lib/input/CSVNLineInputFormat.ジャワ

于 2013-10-20T15:41:51.273 に答える
0

csv ファイルの解析と処理が完了している場合は、hadoop を使用できます。Hadoop では、マップ タスクにキーと値のペアが必要です。

したがって、opencsv API のようなものを使用して、ファイルからデータを取得し、それをキー/値の観点から Hadoop のマッパー クラスに提供します。

詳細な説明については、このリンクをご覧ください。

于 2013-10-19T21:54:16.477 に答える