Apache Avro 데이터를 구문 분석하는 방법에 대해 이야기해 보겠습니다(예제 설명).
青灯夜游
풀어 주다: 2022-02-22 10:47:16
앞으로
3022명이 탐색했습니다.
Apache Avro 데이터를 구문 분석하는 방법은 무엇입니까? 이 기사에서는 Avro 데이터를 생성하기 위해 직렬화하고, Avro 데이터를 구문 분석하기 위해 역직렬화하고, FlinkSQL을 사용하여 Avro 데이터를 구문 분석하는 방법을 소개합니다. 도움이 되길 바랍니다.
인터넷의 급속한 발전으로 클라우드 컴퓨팅, 빅데이터, 인공지능, 사물인터넷 등 첨단기술이 전자상거래 웹사이트 등 오늘날 시대의 주류 첨단기술로 자리 잡았습니다. 집, 스마트시티 등은 사람들의 음식, 의복, 주거, 교통을 편리하게 할 뿐만 아니라, 그 이면에는 사람이 수집하고, 정리하고, 분석하는 수많은 데이터가 존재합니다. 낮은 대기 시간과 높은 데이터 품질을 보장하는 다양한 시스템 플랫폼이 특히 중요합니다. Apache Avro 자체는 바이너리 전송을 위해 스키마를 통해 직렬화됩니다. 반면에 데이터 보안을 보장합니다. Avro는 현재 다양한 산업에서 점점 더 많이 사용되고 있으며, Avro 데이터를 처리하고 구문 분석하는 것이 더 중요합니다. 분석을 위해 FlinkSQL을 사용하세요.
이 기사는 avro 구문 분석에 대한 데모입니다. 현재 FlinkSQL은 간단한 avro 데이터 구문 분석에만 적합합니다. 복잡한 중첩 avro 데이터는 당분간 지원되지 않습니다.
장면 소개
이 기사에서는 주로 다음 세 가지 핵심 내용을 소개합니다.
Avro 데이터를 직렬화하고 생성하는 방법
Avro 데이터를 역직렬화하고 구문 분석하는 방법
FlinkSQL을 사용하여 Avro 데이터를 구문 분석하는 방법 전제 조건 AVRO가 무엇인지 이해하기 위해 Avro Avro 공식 웹 사이트 Quick Start Guide를 참조하십시오 project andconfigure pom dependency
ct{project.basedir }/src/main/ java/.이 구성 후 mvn 명령을 실행할 때 이 플러그인은 이 디렉터리의 avsc 스키마에서 클래스 파일을 자동으로 생성하고 후자의 디렉터리에 배치합니다. avro 디렉터리가 생성되지 않은 경우 수동으로 생성하세요.2. 스키마 정의JSON을 사용하여 Avro용 스키마를 정의합니다. 스키마는 기본 유형(null, boolean, int, long, float, double, bytes 및 string)과 복합 유형(record, enum, array, map, Union 및fixed)으로 구성됩니다. 예를 들어 다음은 사용자의 스키마를 정의하고 기본 디렉터리에 avro 디렉터리를 만든 다음 avro 디렉터리에 새 파일 user.avsc를 만듭니다.
User user1 = new User(); user1.setName("Alyssa"); user1.setFavoriteNumber(256); // Leave favorite col or null // Alternate constructor User user2 = new User("Ben", 7, "red"); // Construct via builder User user3 = User.newBuilder() .setName("Charlie") .setFavoriteColor("blue") .setFavoriteNumber(null) .build(); // Serialize user1, user2 and user3 to disk DatumWriter userDatumWriter = new SpecificDatumWriter(User.class); DataFileWriter dataFileWriter = new DataFileWriter(userDatumWriter); dataFileWriter.create(user1.getSchema(), new File("user_generic.avro")); dataFileWriter.append(user1); dataFileWriter.append(user2); dataFileWriter.append(user3); dataFileWriter.close();
// Deserialize Users from disk DatumReader userDatumReader = new SpecificDatumReader(User.class); DataFileReader dataFileReader = new DataFileReader(new File("user_generic.avro"), userDatumReader); User user = null; while (dataFileReader.hasNext()) { // Reuse user object by passing it to next(). This saves us from // allocating and garbage collecting many objects for files with // many items. user = dataFileReader.next(user); System.out.println(user); }