【问题标题】:How come no Spark Job for parallelise operation?为什么没有 Spark Job 进行并行操作?
【发布时间】:2018-04-06 10:51:32
【问题描述】:

如果做这样的事情:

val data = List.range(2, 11000000)
val distData = sparkSession.sparkContext.parallelize(data)

我得到了回复等,但是当我检查 Spark UI 时,我发现这项工作没有 Job。

当我做这样的事情时......

// read in text file and split each document into words
val tokenized = sparkContext.textFile("README.md").flatMap(_.split(" "))

// count the occurrence of each word
val wordCounts = tokenized.map((_, 1)).reduceByKey(_ + _)

有。

所以我很困惑为什么有时它会生成作业,有时却不会?

【问题讨论】:

  • 这是动作和转换之间的基本区别。尝试阅读 RDD 编程指南,这种差异将在前几段中突出显示。这是链接:spark.apache.org/docs/latest/…
  • 这是一个答案。通过向第一个 RDD 添加一个动作,例如reduce() 它开始了工作没有第一个操作是惰性的并且不会发生,因为它是一个转换。

标签: scala apache-spark rdd


【解决方案1】:

Spark 中主要有两种操作:动作和转换。转换本质上是惰性的,这意味着,它们只会在有一个动作被调用时才会被触发。例如:

val data = spark.read.textFile("spark_test.txt").rdd

上面是一个转换,当你运行代码时,它实际上并不会将spark_test.txt文件加载到内存中。当你调用一个动作时,它会评估转换并完成工作

val res = data.collect()

collect 是一个动作,当你现在运行代码时,文件被加载然后被收集。有关 Spark 中可用的转换和操作的完整列表,请查看doc

【讨论】:

  • 另外值得补充的是,“parallelize”基本上是一种工厂方法,它采用 scala 集合并创建 RDD。它甚至不是对 RDD 的转换操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多