2016-09-19 2 views
2

私はhadoopとmapreduceプログラミングの新機能で、何をすべきかわかりません。私はhadoopパーティショナーでintの配列を定義したいと思います。私は主な機能でこの配列で感じて、その内容をパーティーで使ってみたいです。私はIntWritableとそれの配列を使用しようとしましたが、どれもうまく動作しませんでした。私はIntArrayWritableを使用しようとしましたが、再び動作しませんでした。もし私が助けてくれれば、私は喜ぶでしょう。ありがとうございましたhadoopパーティショナーで配列を定義する方法

public static IntWritable h = new IntWritable[1]; 

public static void main(String[] args) throws Exception { 
    h[0] = new IntWritable(1); 
} 

public static class CaderPartitioner extends Partitioner <Text,IntWritable> { 

    @Override 
    public int getPartition(Text key, IntWritable value, int numReduceTasks) { 
     return h[0].get(); 
    } 
} 

答えて

1

値の数が限られている場合、次のようにすることができます。 メインメソッドで、以下のように設定オブジェクトの値を設定します。

Configuration conf = new Configuration(); 
    conf.setInt("key1", value1); 
    conf.setInt("key2", value2); 

次に、あなたが持っている場合は、リンク https://cornercases.wordpress.com/2011/05/06/an-example-configurable-partitioner/

ノートを支援するあなたのパーティショナ内のそれからのキー/値、その後、

public class testPartitioner extends Partitioner<Text, IntWritable> implements Configurable{ 

Configuration config = null; 

@Override 
public int getPartition(Text arg0, IntWritable arg1, int arg2) { 

    //get your values based on the keys in the partitioner 
    int value = getConf().getInt("key"); 
    //do stuff on value 

    return 0; 
} 

@Override 
public Configuration getConf() { 
    // TODO Auto-generated method stub 
    return this.config; 
} 

@Override 
public void setConf(Configuration configuration) { 
    this.config = configuration; 

} 
} 

をあなたのパーティショナクラスの設定可能なインタフェースを実装し、設定オブジェクトを取得しますファイル内に膨大な数の値が格納されている場合、パーティションファイルのジョブオブジェクトからキャッシュファイルを取得する方法を見つけるのがよいでしょう

1

ここではリファクタリングバージョンのパーティショナーです。主な変更点は次のとおり

  1. 必要なありえないmain()は、初期化はコンストラクタとメンバ変数

public class CaderPartitioner extends Partitioner<Text,IntWritable> { 

    private IntWritable[] h; 

    public CaderPartitioner() { 
     h = new IntWritable[1]; 
     h[0] = new IntWritable(1); 
    } 

    @Override 
    public int getPartition(Text key, IntWritable value, int numReduceTasks) { 
     return h[0].get(); 
    } 
} 

Notesから静的削除

  • で行われるべきで除去します:

    • hは、質問に追加のロジックが含まれていない限り、書き込み可能である必要はありません。
    • h[]が何であるかはっきりしていません。設定するつもりですか?その場合、パーティショナーはおそらくimplement Configurableにする必要があります。Configurableオブジェクトを使用して何らかの方法で配列を設定することができます。
  • +0

    ありがとう。しかし、私は主な機能からh [0]を感じたいと思う。主な機能には設定コードがあります。例えば、私は主な機能でそれを変更するtemp [0]を持っています。私はパーティーの中でtemp [0]をh [0]にコピーしたいと思います。 thanks – saeednasehi

    +0

    'main()'メソッドは使用できません。パーティショナー内のすべてをカプセル化する必要があります。 –

    +0

    ありがとうございました。私はいくつかのキーがあり、番号を減らすファイルを持っています。私はこのファイルを読んで、この情報を使って各キーの減速材を決めたいと思っています。あなたが私にこれをするのに役立つ意見がありますか? – saeednasehi

    関連する問題