복붙노트

[HADOOP] 분산 캐시를 통해 매퍼에서 파일을 액세스

HADOOP

분산 캐시를 통해 매퍼에서 파일을 액세스

내 매퍼에서 분산 파일의 내용을 액세스하려는. 다음은 분산 캐시에 대한 파일의 이름을 생성 내가 작성한 코드입니다. 나 파일의 내용에 접근 도와주세요

   public class DistCacheExampleMapper extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text >
     {
      Text a = new Text();
    Path[] dates = new Path[0];
    public void configure(JobConf conf) {

    try {
            dates = DistributedCache.getLocalCacheFiles(conf);
            String astr = dates.toString();
            a = new Text(astr);

          } catch (IOException ioe) {
            System.err.println("Caught exception while getting cached files: " +   
          StringUtils.stringifyException(ioe));
          }


    }

    @Override
    public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, 
           Reporter reporter) throws IOException {

             String line = value.toString();

             for(Path cacheFile: dates){

                    output.collect(new Text(line), new Text(cacheFile.getName()));

                }



                }


            }

해결법

  1. ==============================

    1.대신 구성 () 메소드이 시도 :

    대신 구성 () 메소드이 시도 :

    List<String []> lines; 
    Path[] files = new Path[0];
    
    public void configure(JobConf conf) {
        lines = new ArrayList<>();
        BufferedReader SW;
        try {
            files = DistributedCache.getLocalCacheFiles(conf);
            SW = new BufferedReader(new FileReader(files[0].toString()));
            String line;
            while ((line = SW.readLine()) != null) {
               lines.add(line.split(",")); //now, each lines entry is a String array, with each element being a column
            }
            SW.close();
    
        } catch (IOException ioe) {
            System.err.println("Caught exception while getting cached files: " +   
            StringUtils.stringifyException(ioe));
        }
    }
    

    이 방법을 사용하면 변수 라인에서 분산 캐시에서 (이 경우 첫 번째 파일) 파일의 내용을해야합니다. 각 라인 항목 ','로 분리 된 문자열 배열을 나타냅니다. 따라서 첫 번째 행의 첫 번째 열 (1) [2] 등 lines.get (0) [0], 두 번째 행의 세 번째 행이다 lines.get

  2. from https://stackoverflow.com/questions/21882583/accesing-file-in-mapper-through-distributed-cache by cc-by-sa and MIT license