job.getFileCache выдает пустой файл в Hadoop из HDFS
Зачем в hadoop получать пустой текстовый файл при чтении из HDFS. Я использую метод itreative в hadoop ofcourse. Я должен поместить выходной txt-файл в hadoop HDFS и для следующей итерации извлечь его из hadoop HDFS. На этом этапе получения задания "Только карта" получите txt-файл с правильным именем, но он полностью пуст.
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String[] str=value.toString().split("\\s+");
int noToken=str.length-1;
String token="";
String curNode=str[0];
float p =0;
String[] keyRank = null;
try{
URI[] localpath= context.getCacheFiles();
FileReader fr = new FileReader (localpath[0].toString());
BufferedReader br = new BufferedReader (fr);
String line = "inf";
while(line!=null){
line = br.readLine();
if(line==null)
break;
//System.out.println(line+" line");
keyRank = line.toString().split("\\s+");
try{
//System.out.println(keyRank[1].toString()+" key rank ");
tsum=tsum+Float.parseFloat(keyRank[1].toString());
tNode++;
}catch (NumberFormatException e){
System.out.println(" rank MapOnly float exception");
}
1 ответ
Вместо того, чтобы использовать это
FileReader fr = new FileReader (localpath[0].toString());
BufferedReader br = new BufferedReader (fr);
используйте этот код
FileSystem fs = FileSystem.get(context.getConfiguration());
Path path = new Path(localpath[0].toString());
InputStreamReader fr = new InputStreamReader (fs.open(path));
BufferedReader br = new BufferedReader (fr);
Также вам нужно iportort файловой системы hadoop и считывателя входного потока, как указано ниже
import org.apache.hadoop.fs.FileSystem;
import java.io.InputStreamReader;