scala - 在 Spark 数组上运行的 Scala 函数是并行的吗?

标签 scala apache-spark

要将函数映射到 RDD 的所有元素,需要首先使用收集方法将 RDD 转换为数组类型:

scala> val x = sc.parallelize(List(List("a"), List("b"), List("c", "d")))
x: org.apache.spark.rdd.RDD[List[String]] = ParallelCollectionRDD[1] at parallelize at <console>:12

scala> x.collect()
res0: Array[List[String]] = Array(List(a), List(b), List(c, d))

scala> x.flatMap(y => y)
res3: org.apache.spark.rdd.RDD[String] = FlatMappedRDD[3] at flatMap at <console>:15

上面示例“x”中数组类型的所有操作都是并行运行的吗?

最佳答案

To map a function agains all elements of an RDD it is required to first convert the RDD to an Array type using collect method

不,不是。 RDD 有 map 方法。

Are all operations on the Array type in above example "x" run in parallel ?

上面的例子中没有对Array类型进行任何操作。 x 仍然是一个 RDD,你扔掉 x.collect() 创建的数组。如果您改为调用 x.collect().map(...)x.collect().flatMap(...),则操作不会在并行。

一般来说,Spark 不会以任何方式影响数组或 Scala 集合上的操作;只有 RDD 上的操作才会并行运行。当然,您可以使用例如Scala 并行集合用于在单个节点内并行计算,但这与 Spark 无关。

关于scala - 在 Spark 数组上运行的 Scala 函数是并行的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23785553/

相关文章:

scala - Scala 中如何评估方法?

scala - 如何为 Spark 结构化流编写 ElasticsearchSink

python - 将 JSON 键值分解为新行

json - 无法将数据集从SPARK传输到HBase表

apache-spark - Pyspark pandas_udf 文档代码的错误 :'java.lang.UnsupportedOperationException'

mysql - Scala Play 2.4.x 通过异常 (MySQL) 处理扩展字符到 Java Mail

scala - 如何使用 maven BOM( Material list )来管理我在 SBT 中的依赖项?

java - 显示 Intellij 编译警告

java - 如何在spark shell中注册Java Spark UDF?

java - 运行 JavaKafkaWordCount.java 时出现错误