десериализовать с помощью крио без класса dto в classpath - PullRequest
0 голосов
/ 25 апреля 2020

Можно ли в kryo сериализовать объект вместе со схемой данных или получить схему из данных, сериализованных стандартным способом? Мне нужно убедиться, что на стороне клиента не нужен класс в classpath. загрузить его из сериализованных данных, а затем использовать отражение для вычитания его полей или десериализации всех данных в картах, списках, примитивных типах и т. д. c, таких как JSON или XML

1 Ответ

0 голосов
/ 25 апреля 2020

Сохраняет SampleBean как JSON строка

val conf = new SparkConf()
      .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
      .set("spark.kryo.registrationRequired", "true")
      .registerKryoClasses(Array(classOf[SampleBean], classOf[InternalRow]
        , classOf[Array[InternalRow]]
        , classOf[WriteTaskResult]
        , classOf[FileCommitProtocol.TaskCommitMessage]
        , classOf[ExecutedWriteSummary],
        classOf[BasicWriteTaskStats]))

    val spark = SparkSession.builder.master("local[*]")
      .config(conf)
      .getOrCreate

    import spark.implicits._
    val df = List(SampleBean("A", "B")).toDF()
    df.write.mode(SaveMode.Overwrite).json("src/main/resources/kryoTest")
    df.printSchema()

читает данные просто JSON

val sparkNew = Constant.getSparkSess
    val dfNew = sparkNew.read.json("src/main/resources/serialisedJavaObj.json").toDF()
    dfNew.printSchema()
...