私はカンマ区切りのファイルを多くの列で取り、会社名、顧客とのやりとりの結果、何回起こったのかを調べるプロジェクトがあります。
次に、良好な相互作用に対する悪い相互作用の割合を計算する必要があります 私はHadoopとJavaを使用しています。
私は働くMapとReduceを持っています。会社名と良いやりとりの数がどれほど多いか分かります。Hadoopでパーセンテージを取得する
私の問題は、私がHadoopに良いと悪い分けを分けてもらう方法が見つからないということです。
ほとんどの会社に悪いやりとりはありません。ここで
ここに私のMAPP
public class TermProjectMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
@Override
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String[] columb = value.toString().split(",");
String companyName = columb[5];
String companyResponseToConsumer = columb[12];
String lookfor = "closed without relief";
if (companyResponseToConsumer.toLowerCase().contains(lookfor)) {companyResponseToConsumer="Bad";}
else {companyResponseToConsumer="Good";}
//System.out.println(companyResponseToConsumer);
if (companyName != "" && companyResponseToConsumer != "")
{
word.set (companyName + " " + companyResponseToConsumer);
context.write(word, one);
}
}
}
は
public class TermProjectReducer extends Reducer < Text, IntWritable, Text, IntWritable >
{
private IntWritable result = new IntWritable();
@Override
public void reduce(Text key, Iterable <IntWritable> values, Context context) throws IOException, InterruptedException
{
int sum = 0;
for (IntWritable val : values)
{
sum += val.get();
}
if (sum > 0)
{
result.set(sum);
context.write(key, result);
}
}
}
これは私が今取得しています何の例ですが、私の削減です。
AMERICAN EAGLE MORTGAGE COMPANY,Good, 4
AMERICAN EQUITY MORTGAGE,Good, 26
AMERICAN EXPRESS COMPANY,Bad, 250
AMERICAN EXPRESS COMPANY,Good, 9094
AMERICAN FEDERAL MORTGAGE CORPORATION,Bad, 1
AMERICAN FEDERAL MORTGAGE CORPORATION,Good, 3
AMERICAN FINANCE HOUSE LARIBA,Good, 3
AMERICAN FINANCIAL MORTGAGE COMPANY,Good, 3
Text
の減速値としてDoubleWritable
を使用することをお勧め? –はい、MapReduceとJavaである必要があります。 – Keg
さて、あなたのレデューサーはちょうど言葉遣いをしています。 「良い」と「悪い」だけのカウントを分離するために何を試みましたか? –