20,810
社区成员
发帖
与我相关
我的任务
分享
import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public
class knn {
public static class TokenizerMapper extends
Mapper<LongWritable, Text, Point2D, Text> {
public Text one = new Text();
public Point2D Point2DD = new Point2D();
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String uri = "hdfs://localhost:9000/user/input/test.txt";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);
FSDataInputStream hdfsInStream = fs.open(new Path(uri));
byte[] ioBuffer = new byte[13];
int readLen = hdfsInStream.read(ioBuffer);
double testx, testy, datax, datay, distance;
while (-1 != readLen) {
String res = new String(ioBuffer);
readLen = hdfsInStream.read(ioBuffer);
String tline = res.toString();
String[] tlineSplit = tline.split(" ");
testx = Double.parseDouble(tlineSplit[1]);
testy = Double.parseDouble(tlineSplit[2]);
String dline = value.toString();
String[] dlineSplit = dline.split(" ");
datax = Double.parseDouble(dlineSplit[1]);
datay = Double.parseDouble(dlineSplit[2]);
distance = Math.sqrt((testx - datax) * (testx - datax)
+ (testy - datay) * (testy - datay));
Point2DD.x = tlineSplit[0];
//Point2DD.setX(tlineSplit[0]);
Point2DD.y = distance;
one.set(dlineSplit[0]);
// Point2DD(tlineSplit[0],distance);
context.write(Point2DD, one);
}
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
if (args.length != 2) {
System.err.println("Usage: wordcount ");
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(knn.class);
job.setMapperClass(TokenizerMapper.class);
//job.setReducerClass(IntSumReducer.class);
job.setMapOutputKeyClass(Point2D.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Point2D.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.Writable;
public class Point2D implements Writable {
public double y;
public String x;
public String getX() {return x;}
public double getY() {return y;}
public void readFields(DataInput in) throws IOException {
x = in.readUTF();
y = in.readDouble();
}
public void write(DataOutput out) throws IOException {
out.writeChars(x);
out.writeDouble(y);
}
}