2

내 설정 :스파크 작업 속도 관계형

  • 나는 MS SQL 서버
  • 내가 푸른 HDInsights
  • Spark.Version에서 실행되는 스파크 클러스터가 푸른 (V12)을 실행이 : 1.6.2
  • Scala.Version : 2.10.5 나는 JDBC 드라이버를 통해, SQL 서버에서 내 데이터 (약 5 백만 행)에서 당겨, 다음 일을 업데이트하고

열 이름. 그렇다면 내 논리를 수행합니다.

println("SQL Load Start: " + TimeStamp.getCurrentTime.toDateString) 
val options: Map[String, String] = Map("url" -> connectionString, 
    "dbtable" -> ("(SELECT * FROM Data)" + "Data")) 
val data = sQLContext.read.format("jdbc").options(options).load() 
println("DF Count: " + data.count().toString) 
println("Partition Count: " + data.rdd.partitions.length.toString) 
println("SQL Load End: " + TimeStamp.getCurrentTime.toDateString) 

나는 SQL 서버를 확장

, 내 데이터를 빠르게에서 읽어 내 논리는 약 10 초에서 실행 : 여기

내가 서버에서 읽어 방법이다. SQL 서버가 작 으면 내 데이터가 더 느린 속도 (예상)로 읽히지 만 내 논리에도 약 3-4 분이 소요되는 훨씬 오래 걸립니다 (예상치 못한 오류).

클러스터 크기가 변경되지 않습니다. DataFrame의 파티션 수가 변경되지 않습니다. SQL 서버의 크기 만 변경하고 있습니다.

내 스파크 작업의 논리 부분이 SQL 서버의 크기에 따라 변동하는 이유에 대한 아이디어가있는 사람이 있습니까?

답변

0

나는 이것을 알아 냈다. 내 동료 중 한 명이 훈련에서 배운 것을 생각 나게했습니다. MS SQL에서 데이터를 검색 한 후에 데이터를 캐시하지 않으면 작업 할 때 데이터를 다시 검색합니다.

println("SQL Load Start: " + TimeStamp.getCurrentTime.toDateString) 
val options: Map[String, String] = Map("url" -> connectionString, 
    "dbtable" -> ("(SELECT * FROM Data)" + "Data")) 
val data = sQLContext.read.format("jdbc").options(options).load() 

data.cache() // NEW CODE 

println("DF Count: " + data.count().toString) 
println("Partition Count: " + data.rdd.partitions.length.toString) 
println("SQL Load End: " + TimeStamp.getCurrentTime.toDateString) 
: 다음과 같은

수있는 업데이트 된 외모