2017-11-20 3 views
0

Lassen Sie uns sagen, ich erstellte Datensatz durch verschiedene Transformationen (Join, Karte und etc) und speicherte es in Tabelle A in HBase. Jetzt möchte ich den gleichen Datensatz in anderen Tabellen in HBase mit der Auswahl bestimmter Spalten speichern. Sollte ich in diesem Fall nach dem Speichern in Tabelle A die Persistent-Funktion verwenden? Oder wenn ich nur die Funktion wähle, ist das egal?Spark Persist-Funktion in der Wiederverwendung Datensatz

Zum Beispiel:

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

Antwort

1

Scala ist faul, in diesem Fall bedeutet dies, dass alle Transformationen für jede Aktion erneut ausgeführt werden, wenn Sie die Daten nicht beibehalten. Daher, wenn die Datenmenge Berechnung ds

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

eine lange Zeit in Anspruch nimmt, dann wäre es absolut von Vorteil sein, um die Daten zu beharren. Für den besten Effekt würde ich empfehlen, dass es vor dem ersten Speichern gemacht wird (das Speichern auf table A). In der Folge wird das Lesen von Daten und Transformationen zweimal durchgeführt.

Beachten Sie, dass Sie unpersist() erst dann verwenden sollten, wenn alle Aktionen für das Dataset und die nachfolgenden Datasets ausgeführt wurden.

0

Sie tun können

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

diese Weise können Sie alles anhalten können, und halten Sie dann verschiedene Sätze von Spalten zu verschiedenen Tabellen zu speichern.

Verwandte Themen