2017-09-12 4 views
-2

spark-scala 개발을 처음 사용합니다. 스칼라를 사용하여 스파크로지도 값을 만들려고하는데 아무 것도 인쇄하지 않습니다.스파크/스칼라에서 맵 값을 설정하는 방법

def createMap() : Map[String, Int] = { 
var tMap:Map[String, Int] = Map() 
val tDF = spark.sql("select a, b, c from temp") 
for (x <- tDF) { 
    val k = x.getAs[Long](0) + "|" + x.getAs[Long](1) 
    val v = x.getAs[Int](2) 
    tMap += (k -> v) 
    println(k -> v) ///----------This print values 
} 
println("Hellllooooooooo1") 
for ((k,v) <- tMap) println("key = " + k+ ", value= " + v) ////------This prints nothing 
println("Hellllooooooooo2") 
return tMap 
} 

제안 해주십시오.

답변

1

user8598832는 (제대로의 일부 값을) 제대로하는 방법을 제공합니다. 접근 방식이 작동하지 않는 이유는 Executor의 맵에 (k, v)를 추가하는 것이지만, println은 드라이버에서 발생합니다. 일반적으로 드라이버에서 맵을 볼 수 없습니다 (s) (분산 모드가 아닌 로컬 모드로 실행하는 것은 단지 유물 일뿐입니다.)

+0

고맙습니다. –

1

"올바른"(드라이버 수집하는 적 권리 인 경우) 방법은 그것을 할 수 있습니다 :

import org.apache.spark.sql.functions._ 

tDF.select(concat_ws("|", col("a"), col("b")), col("c")).as[(String, Int)].rdd.collectAsMap 
+0

죄송합니다. 이미이 작업을 수행 할 수있었습니다. 하지만 내 질문은 내가 원래 게시 한 코드에서 무엇이 잘못 되었습니까? 그리고 그것 뒤에있는 개념은 무엇입니까? –

관련 문제