job.getFileCache выдает пустой файл в Hadoop из HDFS - PullRequest
0 голосов
/ 13 мая 2018

Почему в hadoop получается пустой текстовый файл при чтении из HDFS. я использую метод itreative в hadoop ofcourse, я должен поместить выходной текстовый файл в 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 Ответ

0 голосов
/ 13 мая 2018

Вместо этого

    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);

Также вам нужно iMPort файловой системы hadoop и считывателя входного потока, как указано ниже

       import org.apache.hadoop.fs.FileSystem;
       import java.io.InputStreamReader;
...