Невозможно преобразовать RDD [Java-класс] в Dataframe в Spark Scala - PullRequest
0 голосов
/ 08 июня 2019

У меня есть 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.авро.Схема

...