Я использую Spark 2.4 и ссылаюсь на https://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-persistence
Класс EJB:
public class EmployeeBean implements Serializable {
private Long id;
private String name;
private Long salary;
private Integer age;
// getters and setters
}
Spark Пример:
SparkSession spark = SparkSession.builder().master("local[4]").appName("play-with-spark").getOrCreate();
List<EmployeeBean> employees1 = populateEmployees(1, 1_000_000);
Dataset<EmployeeBean> ds1 = spark.createDataset(employees1, Encoders.kryo(EmployeeBean.class));
Dataset<EmployeeBean> ds2 = spark.createDataset(employees1, Encoders.bean(EmployeeBean.class));
ds1.persist(StorageLevel.MEMORY_ONLY());
long ds1Count = ds1.count();
ds2.persist(StorageLevel.MEMORY_ONLY());
long ds2Count = ds2.count();
Я искал хранилище в SparkВеб-интерфейс.Полезная часть -
ID RDD Name Size in Memory
2 LocalTableScan [value#0] 56.5 MB
13 LocalTableScan [age#6, id#7L, name#8, salary#9L] 23.3 MB
Несколько вопросов:
Разве размер сериализованного RDD Kryo не должен быть меньше, чем Java RDD, сериализированного RDD, а не большечем двойной размер?
Я также пробовал режим MEMORY_ONLY_SER()
и размер RDD одинаковы.СДР как сериализованные объекты Java должны храниться в виде одного байтового массива на раздел.Разве размер сохраняемых СДР не должен быть меньше десериализованных?
Что именно делает добавление Kryo и bean-кодировщиков при создании набора данных?
Можно ли переименовать сохраненные RDD для лучшей читаемости?