У меня есть avro
сообщение и .avsc
файл.Я создал класс Java из файла .avsc
.Теперь я хочу преобразовать сообщение avro (json) во фрейм данных.Я прочитал сообщение.Сообщение успешно декодировано, и я получил RDD [Product], но не могу преобразовать RDD [Product] в фрейм данных.Мне нужно сохранить сообщение в формате .avro.
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("test").setMaster("local[*]")
val spark = SparkSession.builder().config(conf).getOrCreate()
import spark.implicits._
val rdd = spark.read.textFile("/Users/lucy/product_avro.json").rdd
val rdd1 = rdd.map(string => toProduct(string))
spark.createDataFrame(rdd1, classOf[Product]) // not working
}
def toProduct(input: String): Product = {
return new SpecificDatumReader[Product](Product.SCHEMA$)
.read(null, DecoderFactory.get().jsonDecoder(Product.SCHEMA$, input))
}
Ошибка: java.lang.UnsupportedOperationException: не может иметь циклические ссылки в классе компонента, но получена циклическая ссылка на класс org.apache.авро.Схема