Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么组合器从未在spark Aggregative Ebykey中调用过?_Scala_Apache Spark - Fatal编程技术网

Scala 为什么组合器从未在spark Aggregative Ebykey中调用过?

Scala 为什么组合器从未在spark Aggregative Ebykey中调用过?,scala,apache-spark,Scala,Apache Spark,我正在试图了解aggregateByKey如何在spark中工作 下面的示例转换为 ("David", 6), ("Abby", 4), ("David", 5), ("Abby", 5)) 到 使用下面的代码 val babyNamesCSV = spark.sparkContext.parallelize(List(("David", 6), ("Abby", 4), ("David", 5), ("Abby", 5))) babyNamesCSV.aggregateBy

我正在试图了解
aggregateByKey
如何在spark中工作

下面的示例转换为

("David", 6), ("Abby", 4), ("David", 5), ("Abby", 5))

使用下面的代码

    val babyNamesCSV = spark.sparkContext.parallelize(List(("David", 6), ("Abby", 4), ("David", 5), ("Abby", 5)))

    babyNamesCSV.aggregateByKey(new HashSet[Int])(
        (k,v) => {
            println("start")
            println(k)
            println(v)
            println("end")
            k += v
        }, 
        (v,k) => {
            println("start2")
            println(k)
            println(v)
            println("end2")
            v ++ k
        }).map(line => {
            println(line)
            line
        }).take(100)

我观察到组合器
println
从未在
sbt
终端上显示,即使
seqOp
显示,是否有原因

为什么不尝试在输入中添加第三个元素以及数据中的一个键呢。然后,从两个函数中查找println


原因可能是,与驱动程序不在同一台机器/jvm上的工作者/执行者无法向驱动程序显示其标准输出。希望这有帮助。

假设您在
local
模式下工作(不是集群/纱线等),我唯一能想象的是
babyNamesCSV
只有一个分区,如果您只有一个核心或设置
spark.master=local[1]
,就会发生这种情况。在这种情况下,不会调用合并器,因为不需要合并分区

尝试显式设置分区数:

val babyNamesCSV = spark.sparkContext.parallelize(List(("David", 6), ("Abby", 4), ("David", 5), ("Abby", 5)), numSlices = 2)
val babyNamesCSV = spark.sparkContext.parallelize(List(("David", 6), ("Abby", 4), ("David", 5), ("Abby", 5)), numSlices = 2)