Sử dụng Maven để thực hiện serialize với Avro

Để sử dụng Avro trong dự án Maven, bạn cần thêm dependency sau vào file pom.xml:``` <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> 1.7.7


Thêm plugin build cho Avro vào phần `<build>` của file pom.xml:```
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro-maven-plugin</artifactId>
            <version>1.7.7</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>schema</goal>
                        <goal>protocol</goal>
                        <goal>idl-protocol</goal>
                    </goals>
                    <configuration>
                        <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory>
                        <outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

Tạo tệp JSON chứa schema dữ liệu và đặt nó vào thư mục ${project.basedir}/src/main/avro/:``` { "namespace": "user_machine_learning", "type": "record", "name": "Product", "fields": [ {"name": "productId", "type": "string", "default": "null"}, {"name": "companyName", "type": "string", "default": "null"}, {"name": "productInfo", "type": "string", "default": "null"}, {"name": "direction", "type": "string", "default": "null"} ] }


Sau khi cấu hình xong, chạy `mvn install` để tạo các lớp Java từ schema. Các lớp này sẽ được tạo ra trong thư mục `${project.basedir}/src/main/java/`.Việc tiếp theo là sử dụng các lớp này để thực hiện serialize và deserialize dữ liệu:```
public class AvroTest {
    public static void main(String[] args) throws IOException {
        // Serialize
        Product product = Product.newBuilder()
                                 .setProductId("1")
                                 .setCompanyName("Đây là một thử nghiệm")
                                 .setProductInfo("Thông tin chi tiết về thử nghiệm")
                                 .setDirection("1")
                                 .build();
        
        File file = new File("/Users/niutao/Desktop/avro_test/user.avro");
        DatumWriter<Product> writer = new SpecificDatumWriter<>(Product.class);
        DataFileWriter<Product> dataFileWriter = new DataFileWriter<>(writer);
        dataFileWriter.create(Product.getClassSchema(), file);
        dataFileWriter.append(product);
        dataFileWriter.close();

        // Deserialize
        DatumReader<Product> reader = new SpecificDatumReader<>(Product.class);
        DataFileReader<Product> dataFileReader = new DataFileReader<>(file, reader);
        Product deserializedProduct = null;
        while (dataFileReader.hasNext()) {
            deserializedProduct = dataFileReader.next();
            System.out.println(deserializedProduct);
        }
    }
}

Thẻ: Avro Maven Java Serialization Deserialization

Đăng vào ngày 16 tháng 7 lúc 02:17