gpt4 book ai didi

scala - 如果我在 Spark 作业中使用 Scala 并行集合会怎样?

转载 作者:行者123 更新时间:2023-12-02 09:23:48 27 4
gpt4 key购买 nike

如果我在 Spark 作业中使用 Scala 并行集合会怎样? (通常会生成作业以处理多个线程上的集合分区)。或者就此而言,可能会启动子线程的作业?

spark 的 JVM 是否将执行限制在单个内核上,或者它是否可以合理地将工作分配给多个内核(大概在同一个节点上?)

最佳答案

我们在 Spark rdd.mapPartitions(...) 函数中广泛使用 Scala 并行集合。它非常适合我们,我们能够很好地扩展 IO 密集型作业(调用 Redis/HBase/等...)

重要警告:Scala 并行集合不懒惰!当您构造 par-iterator 时,它实际上将所有行从 Iterator[Row] 带入内存。我们主要在 Spark-Streaming 上下文中使用它,所以这对我们来说不是问题。但是当我们想用 Spark 处理巨大的 HBase 表时,这是一个问题

private def doStuff(rows: Iterator[Row]): Iterator[Row] = {
val pit = rows.toIterable.par
pit.tasksupport = new ExecutionContextTaskSupport(ExecutionContext.fromExecutor(....)
pit.map(row => transform(row)).toIterator
}

rdd.mapPartitions(doStuff)

我们使用 ExecutionContextTaskSupport 将所有计算放入专用的 ThreadPool 而不是使用默认的 JVM 级 ForkJoin 池。

关于scala - 如果我在 Spark 作业中使用 Scala 并行集合会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39520306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com