java - 在类路径中没有 dto 类的情况下使用 kryo 反序列化

标签 java serialization kryo

在 kryo 中是否可以将对象与数据模式一起序列化,或者从以标准方式序列化的数据中获取模式?我需要确保客户端不需要类路径中的类。从序列化数据加载它,然后使用反射减去其字段,或反序列化映射、列表、原始类型等中的所有数据,与 JSON 或 XML 相同

最佳答案

将 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()

关于java - 在类路径中没有 dto 类的情况下使用 kryo 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61426059/

相关文章:

java - 从 BST 获取最大值和最小值(C++ 与 Java)

scala - 在 APACHE SPARK 中通过 KryoSerializer 和 JavaSerializer 使用 Scala Pickling 序列化

apache-spark - Spark 与 Avro、Kryo 和 Parquet

java - 像 Linux 终端一样分割字符串

java - 如何修复 Eclipse 中的 Maven、Maven 配置和 Maven 依赖性问题

java - 如何在spring mvc中将空数字字段绑定(bind)到默认值0

c# - 在一个 Json 中创建多个表而不使用 JArray?

java - 序列化 lambda 而没有 serialVersionUID?

java - 如何使用将注释写入生成的 XML 的注释来扩展 org.simpleframework.xml

Java、克里奥 : Add fields to class persisted as FieldSerializer