代码之家  ›  专栏  ›  技术社区  ›  Rougher

Spark持久化函数在数据集重用中的应用

  •  2
  • Rougher  · 技术社区  · 7 年前

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

    例如:

    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 回复  |  直到 7 年前
        1
  •  2
  •   Shaido MadHadders    7 年前

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

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

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

    注意,您不应该使用 unpersist()

        2
  •  0
  •   Debasish    7 年前

    你能做到的

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

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