gpt4 book ai didi

java - 序列化包含数据集的对象

转载 作者:行者123 更新时间:2023-12-01 19:49:31 25 4
gpt4 key购买 nike

我正在使用 Spark 2.3.1 和 Java我有一个封装数据集的对象。我希望能够序列化和反序列化这个对象。

我的代码如下:

public class MyClass implements Serializable {

private static final long serialVersionUID = -189012460301698744L;

public Dataset<Row> dataset;

public MyClass(final Dataset<Row> dataset) {
this.dataset = dataset;
}

/**
* Save the current instance of MyClass into a file as a serialized object.
*/
public void save(final String filepath, final String filename) throws Exception{
File file = new File(filepath);
file.mkdirs();

file = new File(filepath+"/"+filename);
try (final ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) {
oos.writeObject(this);
}
}

/**
* Create a new MyClass from a serialized MyClass object
*/
public static MyClass load(final String filepath) throws Exception{
final File file = new File(filepath);
final MyClass myclass;
try (final ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
myclass = ((MyClass) ois.readObject());
}

System.out.println("test 1 : "+ myclass);
System.out.println("test 2 : "+ myclass.dataset);
myclass.dataset.printSchema();

return myclass;
}
// Some other functions
}

但是序列化似乎没有正确完成。 load() 函数给我以下显示:

test 1 : MyClass@520e6089
test 2 : Invalid tree; null:
null

并在 printSchema() 上抛出 java.lang.NullPointerException

为了正确序列化我的对象,我缺少什么?

最佳答案

Spark 数据集仅在用于创建这些数据集的 session 范围内才有意义。因此序列化Dataset是完全没有意义的。

  • 如果您想序列化数据,只需将Dataset写入持久存储即可。
  • 如果您想“序列化”管道,只需继续使用接受某种形式的输入并返回所需的数据集的代码(方法)即可。不要尝试序列化 Dataset 本身。

关于java - 序列化包含数据集的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com