मैं सरणी प्रकार रिकॉर्ड के लिए पीओजेओ का उपयोग करके और मुख्य पीओजेओ कक्षा में सूची के रूप में कॉल करके सरणी प्रकार के रिकॉर्ड के साथ एवरो नेस्टेड रिकॉर्ड्स को deserialize करने के लिए कोड लिख रहा हूँ। हालांकि मुझे समझ में नहीं आ रहा है कि मैं रिकॉर्ड के अक्रमांकन के लिए एकाधिक स्कीमा का उपयोग कैसे कर सकता हूं।

स्कीमा संरचना:

{
"type": "record",
"name": "MainSchemaName",
"version": "2",
"namespace": "com.cmain",
"doc": "AExample",
"fields": [
 {
  "name": "MainABC",
  "type": {
    "type": "array",
    "items": {
      "name": "ABCarr",
      "type": "record",
      "fields": [
        {
          "name": "prod1",
          "type": "double"
        },
        {
          "name": "prod2",
          "type": "string"
        }
      ]
    }
  }
 },
 {
  "name": "comnsu1",
  "type": "int"
 }
 ]
}
0
Learner 23 मार्च 2020, 13:52

1 उत्तर

सबसे बढ़िया उत्तर

आपको प्रत्येक रिकॉर्ड के लिए निम्नानुसार एक फ़ाइल निर्दिष्ट करने की आवश्यकता है:

ABCarr.avsc:

{
      "name": "ABCarr",
      "namespace": "com.cmain",
      "type": "record",
      "fields": [
        {
          "name": "prod1",
          "type": "double"
        },
        {
          "name": "prod2",
          "type": "string"
        }
      ]
}

MainSchemaName.avsc:

{
"type": "record",
"name": "MainSchemaName",
"version": "2",
"namespace": "com.cmain",
"doc": "AExample",
"fields": [
 {
  "name": "MainABC",
  "type": {
       "type": "array",
       "items": "com.cmain.ABCarr",
       "java-class": "java.util.List"
     }
 },
 {
  "name": "comnsu1",
  "type": "int"
 }
 ]
}

फिर आपको एव्रो-मेवेन-प्लगइन को ऐसे स्कीमा बनाने के लिए कॉन्फ़िगर करना चाहिए जो पहले दूसरों (आपके मामले में ABCarr) के लिए आवश्यक हों। मान लें कि आपकी एवरो स्कीमा फाइलें src/main/resources/schema/avro पथ पर स्थित हैं, तो आपको ABCarr बनाने के लिए निम्नलिखित निर्दिष्ट करना चाहिए और फिर इसे MainSchemaName पर टाइप के रूप में उपयोग करना चाहिए:

<plugin>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-maven-plugin</artifactId>
    <version>1.9.2</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>schema</goal>
            </goals>
            <configuration>
                <sourceDirectory>${project.basedir}/src/main/resources/schema/avro</sourceDirectory>
                <stringType>String</stringType>
                <createSetters>true</createSetters>
                <fieldVisibility>private</fieldVisibility>
                <imports>
                    <import>${project.basedir}/src/main/resources/schema/avro/ABCarr.avsc</import>
                </imports>
            </configuration>
        </execution>
    </executions>
</plugin>

तो बस सभी सामान्य स्कीमा आयात विकल्प पर आयात करें।

0
gregorycallea 24 मार्च 2020, 09:48