在Avro模式不允許遞歸引用

Apache Avro數據源不能遞歸引用模式一起使用時火花。

寫的saikrishna.pujari

去年發表在:2022年12月1日

問題

Apache火花返回一個錯誤當試圖讀取一個Apache Avro數據源如果Avro模式有一個遞歸引用。

org.apache.spark.sql.avro。IncompatibleSchemaException:發現遞歸引用Avro模式中,不能處理的火花

導致

火花SQL不支持遞歸在一個Avro數據源引用,因為它是不可能的轉換模式StructType

檢查[火花- 25718][SQL]發現遞歸引用在Avro模式和拋出異常將請求更多的信息。

解決方案

你必須避免使用遞歸引用Avro模式。

測試遞歸引用

你可以測試你的Avro遞歸引用的模式SchemaConverters.toSqlType (< avro-schema >)

sql進口org.apache.spark.sql.avro %。SchemaConverters SchemaConverters.toSqlType (< avro-schema >)

如果Avro模式包含遞歸引用,SchemaConverters.toSqlType返回一個錯誤。

例子

  1. 用遞歸引用創建一個Avro模式。
    sql進口org.apache.avro %。模式val = new Schema.Parser ()。解析(“”“{“類型”:“記錄”,“名字”:“入圍”,“別名”:“LinkedLongs”,“字段”:[{“名稱”:“價值”、“類型”:“長”},{“名稱”:“下一個”、“類型”:[“空”、“入圍”]}]}" " ")
  2. 測試模式SchemaConverters.toSqlType
    sql進口org.apache.spark.sql.avro %。SchemaConverters SchemaConverters.toSqlType(模式)
  3. 它返回一個IncompatibleSchemaException錯誤。
    IncompatibleSchemaException: Avro模式中發現遞歸引用,它不能處理火花:{“類型”:“記錄”,“名字”:“入圍”,“字段”:[{“名稱”:“價值”、“類型”:“長”},{“名稱”:“下一個”、“類型”:[“空”、“入圍”]}],“別名”:[" LinkedLongs "]}





這篇文章有用嗎?