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