2017-11-20 8 views
0

다른 변환 (조인, 맵 등)으로 데이터 집합을 만들고이를 hbase의 테이블 A에 저장했다고 가정 해 봅니다. 이제 특정 열을 선택하여 hbase의 다른 테이블에 동일한 데이터 세트를 저장하려고합니다. 이 경우 테이블 A에 저장 한 후에도 persist 함수를 사용해야합니까? 또는 select 함수 만 사용하면 문제가되지 않습니까? 예를 들어데이터 집합을 재사용 할 때 spark 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(); 

답변

1

스칼라가 게으른 경우,이 경우 데이터를 유지하지 않으면 모든 동작이 모든 변환이 다시 수행됨을 의미합니다. ds

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

시간이 오래 소요되는 데이터 세트를 산출하는 경우 따라서, 절대적으로 데이터를 유지하는 것이 유리할 것이다. 가장 좋은 효과를 위해, 나는 그것이 첫 번째 저장 (table A에 저장) 전에 완료되도록하는 것이 좋습니다. 그 이후에 억지로 행해지면, 모든 데이터 및 변형의 판독이 두 번 수행 될 것입니다.

데이터 집합 및 후속 데이터 집합에 대한 모든 작업이 완료 될 때까지 unpersist()을 사용하면 안됩니다.

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

모든 것을 유지하고 다른 테이블에 컬럼의 다른 세트를 저장 유지할 수 있습니다이 방법을 수행 할 수 있습니다.