복붙노트

[HADOOP] Spark의 원시 바이트 배열 쓰기 및 읽기 - 시퀀스 파일 SequenceFile 사용

HADOOP

Spark의 원시 바이트 배열 쓰기 및 읽기 - 시퀀스 파일 SequenceFile 사용

Apache Spark을 사용하는 파일에 RDD [Array [Byte]]를 쓰고 다시 읽으십니까?

해결법

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

    1.일반적인 문제는 BytesWritable에서 NullWritable로 예외를 캐스팅 할 수없는 이상한 것으로 보입니다. 다른 일반적인 문제는 BytesWritable getBytes는 바이트를 전혀 얻지 못하는 완전히 무의미한 더미입니다. getBytes가하는 일은 결국 0을 추가하는 것보다 바이트를 얻는 것입니다! copyBytes를 사용해야합니다.

    일반적인 문제는 BytesWritable에서 NullWritable로 예외를 캐스팅 할 수없는 이상한 것으로 보입니다. 다른 일반적인 문제는 BytesWritable getBytes는 바이트를 전혀 얻지 못하는 완전히 무의미한 더미입니다. getBytes가하는 일은 결국 0을 추가하는 것보다 바이트를 얻는 것입니다! copyBytes를 사용해야합니다.

    val rdd: RDD[Array[Byte]] = ???
    
    // To write
    rdd.map(bytesArray => (NullWritable.get(), new BytesWritable(bytesArray)))
      .saveAsSequenceFile("/output/path", codecOpt)
    
    // To read
    val rdd: RDD[Array[Byte]] = sc.sequenceFile[NullWritable, BytesWritable]("/input/path")
      .map(_._2.copyBytes())
    
  2. from https://stackoverflow.com/questions/24083332/write-and-read-raw-byte-arrays-in-spark-using-sequence-file-sequencefile by cc-by-sa and MIT license