[java] Java에서 Avro 데이터 파일 생성과 읽기
소개
Avro는 데이터 직렬화 및 RPC 프레임워크로 사용되는 Apache 소프트웨어 재단에 의해 개발된 자바 기반의 데이터 직렬화 시스템입니다. Avro는 데이터 스키마를 사용하여 JSON을 이진 형식으로 변환하고, 이진 데이터를 다시 스키마를 기반으로 역직렬화할 수 있습니다.
이 글에서는 Java에서 Avro 데이터 파일을 생성하고 읽는 방법에 대해 알아보겠습니다.
의존성 추가
Avro를 사용하기 위해 프로젝트에 아래의 의존성을 추가해야 합니다.
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.10.2</version>
</dependency>
데이터 스키마 정의
Avro 데이터 파일을 생성하기 위해 먼저 데이터 스키마를 정의해야 합니다. Avro 스키마는 JSON 형식으로 작성됩니다. 예를 들어, 다음과 같은 간단한 사용자 스키마를 생성할 수 있습니다.
{
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "age", "type": "int"},
{"name": "email", "type": "string"}
]
}
Avro 데이터 파일 생성
Avro 데이터 파일을 생성하기 위해 DataFileWriter
클래스를 사용할 수 있습니다. 다음은 Avro 데이터 파일에 사용자 데이터를 쓰는 예제 코드입니다.
import java.io.File;
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.generic.GenericData;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.EncoderFactory;
import org.apache.avro.specific.SpecificDatumWriter;
public class AvroFileWriter {
public static void main(String[] args) {
// 데이터 스키마 초기화
Schema schema = new Schema.Parser().parse(new File("user.avsc"));
// Avro 데이터 파일 생성
GenericRecord user = new GenericData.Record(schema);
user.put("name", "John Doe");
user.put("age", 30);
user.put("email", "john.doe@example.com");
DatumWriter<GenericRecord> datumWriter = new SpecificDatumWriter<>(schema);
DataFileWriter<GenericRecord> dataFileWriter = new DataFileWriter<>(datumWriter);
try {
dataFileWriter.create(user.getSchema(), new File("users.avro"));
dataFileWriter.append(user);
System.out.println("Avro 데이터 파일이 성공적으로 생성되었습니다.");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
dataFileWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
Avro 데이터 파일 읽기
Avro 데이터 파일을 읽기 위해 DataFileReader
클래스를 사용할 수 있습니다. 다음은 Avro 데이터 파일에서 사용자 데이터를 읽는 예제 코드입니다.
import java.io.File;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
public class AvroFileReader {
public static void main(String[] args) {
DatumReader<GenericRecord> datumReader = new GenericDatumReader<>();
DataFileReader<GenericRecord> dataFileReader;
try {
dataFileReader = new DataFileReader<>(new File("users.avro"), datumReader);
GenericRecord user = null;
while (dataFileReader.hasNext()) {
user = dataFileReader.next(user);
System.out.println(user);
}
System.out.println("Avro 데이터 파일이 성공적으로 읽혔습니다.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
위의 코드에서는 users.avro
파일을 읽고 각 사용자에 대한 정보를 출력합니다.
결론
Java에서 Avro 데이터 파일을 생성하고 읽는 방법에 대해 알아보았습니다. Avro는 빠르고 효율적인 데이터 직렬화 및 역직렬화를 제공하므로 대규모 데이터 처리 작업에 유용하게 사용할 수 있습니다.
더 많은 정보를 원하시면 Avro 공식 문서를 참조하십시오.