use*_*956 1 scala apache-spark
如果我在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)
Run Code Online (Sandbox Code Playgroud)
我们使用ExecutionContextTaskSupport将所有计算放入专用ThreadPool而不是使用默认的JVM级ForkJoin池.
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |