为什么没有Spark Job可以进行并行操作?

时间:2018-04-06 10:51:32

标签: scala apache-spark rdd

如果做这样的事情:

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(_ + _)

有。

所以我很困惑,为什么有时它会产生一个工作,有时它不会?

1 个答案:

答案 0 :(得分:1)

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

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

以上是转换,当您运行代码时,它实际上不会将spark_test.txt文件加载到内存中。当您调用某个操作时,它将评估转换并完成作业

val res = data.collect()

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