이전에 글인 https://deviscreen.tistory.com/78?category=789556 에서 SparkSession을 사용하여 멀티 세션을 설명 했는데 더 자세한 테스트를 진행했다.
추가 테스트
SparkSession을 처음 생성하고 이후에 newSession을 만들었다.
디버깅으로 session는 어떤 값들을 가지고 있는지 테스트 목적
SparkSession session = new SparkUtil().getSparkSession();
SparkSession newSession= session.newSession();
디버깅하면서 코드를 확인한 결과 session과 newSession는 다른 주소 값을 가지고 있다.
session = {SparkSession@4254}
newSession = {SparkSession@4772}
session의 값
session = {SparkSession@4254}
sparkContext = {SparkContext@4255}
existingSharedState = {None$@4256} "None"
parentSessionState = {None$@4256} "None"
extensions = {SparkSessionExtensions@4257}
creationSite = {CallSite@4258} "CallSite(getOrCreate at SparkUtil.java:13,org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:957)\nSparkUtil.<init>(SparkUtil.java:13)\nSparkMain.main(SparkMain.java:6))"
sharedState = {SharedState@4767}
initialSessionOptions = {HashMap@4259} "HashMap" size = 4
sessionState = {SessionState@4768}
sqlContext = {SQLContext@4261}
newSession 의 값
newSession = {SparkSession@4772}
sparkContext = {SparkContext@4255}
existingSharedState = {Some@4774} "Some(org.apache.spark.sql.internal.SharedState@2c1d57bc)"
parentSessionState = {None$@4256} "None"
extensions = {SparkSessionExtensions@4257}
creationSite = {CallSite@4775} "CallSite(newSession at SparkMain.java:10,org.apache.spark.sql.SparkSession.newSession(SparkSession.scala:240)\nSparkMain.main(SparkMain.java:10))"
sharedState = null
initialSessionOptions = {HashMap@4776} "HashMap" size = 0
sessionState = null
sqlContext = {SQLContext@4777}
SparkContext는 같은 값을 가지고 있지만 sqlContext는 다른 값을 가지고 있다.
이것을 보면 SparkSession의 newSession( ) 메서드는 개별의 독립된 sqlContext를 구성한다. 그리고 기본 SparkContext및 캐시된 데이터를 공유하면서 세션을 시작 할 수 있다.
'BackEnd > Spark' 카테고리의 다른 글
Spark Directed acyclic graph, lineage (0) | 2020.03.17 |
---|---|
SparkSession, SparkContext, SQLContext, HiveContext (0) | 2020.03.15 |
SparkSQL Casting 타입 변환, 오류 검출 (0) | 2020.03.11 |
Spark SQL API (0) | 2020.03.09 |
cleaned accumulator [number] (0) | 2020.03.09 |