2 回答
TA贡献1891条经验 获得超3个赞
因此,Apache Spark不提供共享内存:
dataSet.foreach { e =>
items += e
println("len = " + items.length) //1. here length is ok
}
您可以在各自的执行者上修改的本地副本items。items驱动程序上定义的原始列表未修改。结果是:
items.foreach { x => print(x) }
执行,但没有要打印的内容。
请检查了解关闭
虽然这里建议这样做,但是您可以用累加器代替物品
val acc = sc.collectionAccumulator[String]("Items")
dataSet.foreach(e => acc.add(e))
TA贡献1815条经验 获得超10个赞
Spark在执行程序中运行并返回结果。上面的代码无法正常工作。如果您需要从中添加元素,foreach则需要在驱动程序中收集数据并将其添加到中current_set。但是,当您拥有大数据时,收集数据不是一个好主意。
val items = new ListBuffer[String]()
val rdd = spark.sparkContext.parallelize(1 to 10, 4)
rdd.collect().foreach(data => items += data.toString())
println(items)
输出:
ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
添加回答
举报