如何在spark / scala

时间:2017-09-12 16:07:09

标签: scala apache-spark

我是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
}

请建议。

2 个答案:

答案 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) )(在可能的范围内,这只是在本地模式下运行而不是在分布式模式下的工件)。