【问题标题】:Spark persist function in reusing dataset重用数据集的 Spark 持久化功能
【发布时间】:2018-05-04 01:50:45
【问题描述】:

假设我通过不同的转换(join、map 等)创建了数据集,并将其保存到 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();

【问题讨论】:

    标签: java apache-spark caching dataset persistence


    【解决方案1】:

    Scala 是惰性的,在这种情况下,这意味着如果您不持久化数据,每个操作都会重做所有转换。因此,如果计算数据集ds

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

    需要很长时间,那么持久化数据绝对是有利的。为了获得最佳效果,我建议在第一次保存之前完成(保存到table A)。在persisting完成之后,所有数据的读取和转换都会进行两次。

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

    【讨论】:

      【解决方案2】:

      你可以的

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

      这样您可以持久化所有内容,然后将不同的列集保存到不同的表中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-07
        • 2016-06-24
        • 2019-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多