我是spark-scala开发的新手。我正在尝试使用scala在spark中创建地图值,但没有打印任何内容
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
}
请建议。
答案 0 :(得分:1)
“正确”(如果收集到司机是对的)方式:
import org.apache.spark.sql.functions._
tDF.select(concat_ws("|", col("a"), col("b")), col("c")).as[(String, Int)].rdd.collectAsMap
答案 1 :(得分:1)
user8598832提供了如何正确执行(正确的某些值)。你的方法不起作用的原因是你在执行器中将(k,v)添加到地图中,但是println出现在驱动程序中,驱动程序通常不会在执行程序中看到地图(s) )(在可能的范围内,这只是在本地模式下运行而不是在分布式模式下的工件)。