복붙노트

[HADOOP] Spark를 사용하여 디렉토리에서 Hadoop 파일을 재귀 적으로 읽는 방법?

HADOOP

Spark를 사용하여 디렉토리에서 Hadoop 파일을 재귀 적으로 읽는 방법?

주어진 디렉토리 안에는 여러 개의 다른 폴더가 있고 각 폴더에는 Hadoop 파일 (part_001 등)이 있습니다.

directory
   -> folder1
      -> part_001...
      -> part_002...
   -> folder2
      -> part_001...
   ...

주어진 디렉토리에서,이 디렉토리 내의 모든 폴더의 내용을 재귀 적으로 읽고 스칼라를 사용하여이 내용을 Spark의 단일 RDD에로드하려면 어떻게해야합니까?

나는 이것을 발견했지만 재귀 적으로 서브 폴더에 들어 가지 않는다. (import org.apache.hadoop.mapreduce.lib.input을 사용하고있다.)

  var job: Job = null
  try {
    job = Job.getInstance()
    FileInputFormat.setInputPaths(job, new Path("s3n://" + bucketNameData + "/" + directoryS3))
    FileInputFormat.setInputDirRecursive(job, true)
  } catch {
    case ioe: IOException => ioe.printStackTrace(); System.exit(1);
  }
  val sourceData = sc.newAPIHadoopRDD(job.getConfiguration(), classOf[TextInputFormat], classOf[LongWritable], classOf[Text]).values

또한 SequenceFile을 사용하는이 웹 페이지를 발견했지만 다시 내 사례에 적용하는 방법을 이해할 수 없습니까?

해결법

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

    1.Spark을 사용하고 있다면 다음과 같이 와일드 카드를 사용하여이를 수행 할 수 있습니다 :

    Spark을 사용하고 있다면 다음과 같이 와일드 카드를 사용하여이를 수행 할 수 있습니다 :

    scala>sc.textFile("path/*/*")
    

    sc는 Spark-shell을 사용하고 있다면 기본적으로 초기화되는 SparkContext이거나 자신 만의 프로그램을 생성하는 경우 SparkContext를 직접 인스턴스화해야합니다.

    다음 플래그를주의하십시오.

    이 플래그가 true로 표시되어야합니다.

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

    2.이 매개 변수는 다음과 같이 설정해야합니다.

    이 매개 변수는 다음과 같이 설정해야합니다.

    .set("spark.hive.mapred.supports.subdirectories","true")
    .set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive","true")
    
  3. ==============================

    3.

    connector_output=${basepath}/output/connector/*/*/*/*/* 
    

    내가 구조와 같은 구조를 가지고있을 때 나를 위해 일한다.

    ${basepath}/output/connector/2019/01/23/23/output*.dat
    

    나는 다른 속성을 설정할 필요가 없었으며 다음과 같이 사용했습니다.

    sparkSession.read().format("csv").schema(schema)
                        .option("delimiter", "|")
                        .load("/user/user1/output/connector/*/*/*/*/*");
    
  4. from https://stackoverflow.com/questions/42026043/how-to-recursively-read-hadoop-files-from-directory-using-spark by cc-by-sa and MIT license