복붙노트

[HADOOP] Spark Streaming에서 출력 파일 이름 변경

HADOOP

Spark Streaming에서 출력 파일 이름 변경

나는 논리가 진행되는 한 극단적으로 잘 수행되는 불꽃 작업을하고있다. 그러나 saveAsTextFile을 사용하여 s3 버킷에 파일을 저장하면 출력 파일의 이름은 part-00000, part-00001 등의 형식이됩니다. 출력 파일 이름을 변경하는 방법이 있습니까?

고맙습니다.

해결법

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

    1.Spark에서는 saveAsNewAPIHadoopFile을 사용하고 hadoop 설정에서 mapreduce.output.basename 매개 변수를 설정하여 접두어 ( "접두사"부분 만)를 변경할 수 있습니다.

    Spark에서는 saveAsNewAPIHadoopFile을 사용하고 hadoop 설정에서 mapreduce.output.basename 매개 변수를 설정하여 접두어 ( "접두사"부분 만)를 변경할 수 있습니다.

    val hadoopConf = new Configuration()
    hadoopConf.set("mapreduce.output.basename", "yourPrefix")
    
    yourRDD.map(str => (null, str))
            .saveAsNewAPIHadoopFile(s"$outputPath/$dirName", classOf[NullWritable], classOf[String],
              classOf[TextOutputFormat[NullWritable, String]], hadoopConf)
    

    귀하의 파일 이름은 다음과 같습니다 : yourPrefix-r-00001

    hadoop과 Spark에서는 하나 이상의 감속기 (hadoop) 또는 하나 이상의 파티션 (spark)을 가질 수 있기 때문에 출력에 하나 이상의 파일을 포함 할 수 있습니다. 그런 다음 각각에 대해 고유 한 이름을 보증해야합니다. 따라서 파일 이름의 마지막 부분에서 시퀀스 번호를 무시할 수 없습니다.

    그러나 파일 이름을보다 잘 제어하려면 TextOutputFormat 또는 FileOutputFormat을 확장하고 getUniqueFile 메서드를 재정의 할 수 있습니다.

  2. ==============================

    2.[Java의 솔루션]

    [Java의 솔루션]

    다음과 같이 말할 수 있습니다.

    JavaRDD<Text> rows;
    

    그리고 customPrefix-r-00000과 같은 파일에이 파일을 작성하려고합니다.

    Configuration hadoopConf = new Configuration();
    hadoopConf.set("mapreduce.output.basename", "customPrefix");
    
    rows.mapToPair(row -> new Tuple2(null, row)).saveAsNewAPIHadoopFile(outputPath, NullWritable.class, Text.class, TextOutputFormat.class, hadoopConf);
    

    그럼 !!

  3. from https://stackoverflow.com/questions/37972381/change-output-file-name-in-spark-streaming by cc-by-sa and MIT license