Spark重用数据集中的持久化功能

时间:2017-11-20 18:36:17

标签: java apache-spark caching dataset persistence

假设我通过不同的转换(连接,地图等)创建了数据集,并将其保存到hbase中的表A.现在我想通过选择特定列将相同的数据集保存到hbase中的另一个表。在这种情况下,我应该在保存到表A后使用持久功能吗?或者,如果我只使用选择功能,它并不重要?

例如:

Dataset<Row> ds = //computing dataset by different transformations
//save ds to table A in hbase

ds.persist();

Dataset<Row> ds2 = ds.select(col("X"));
//save ds2 to table B in hbase

Dataset<Row> ds3 = ds.select(col("Y"),col("Z"));
//save ds3 to table C in hbase

ds.unpersist();

2 个答案:

答案 0 :(得分:1)

Scala很懒,在这种情况下,这意味着如果不保留数据,将为每个操作重做所有转换。因此,如果计算数据集ds

Dataset<Row> ds = //computing dataset by different transformations

需要很长时间,然后绝对有利于持久保存数据。为了达到最佳效果,我建议在第一次保存之前完成(保存到table A)。在此之后完成持久化,所有数据和转换的读取都将完成两次。

请注意,在完成对数据集和后续数据集的所有操作之前,不应使用unpersist()

答案 1 :(得分:0)

你可以做到

Dataset<Row> ds = //computing dataset by different transformations
ds.persist();    
//save ds to table A in hbase

Dataset<Row> ds2 = ds.select(col("X"));
//save ds2 to table B in hbase

Dataset<Row> ds3 = ds.select(col("Y"),col("Z"));
//save ds3 to table C in hbase

ds.unpersist();

通过这种方式,您可以保留所有内容,然后将不同的列集保存到不同的表中。