如果做这样的事情:
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(_ + _)
有。
所以我很困惑,为什么有时它会产生一个工作,有时它不会?
答案 0 :(得分:1)
Spark中主要有两种类型的操作:动作和转换。转换本质上是懒惰的,这意味着它们只有在有一个被调用的动作时才会被触发。例如:
val data = spark.read.textFile("spark_test.txt").rdd
以上是转换,当您运行代码时,它实际上不会将spark_test.txt
文件加载到内存中。当您调用某个操作时,它将评估转换并完成作业
val res = data.collect()
collect
是一个动作,当你现在运行代码时,文件被加载然后被收集。有关Spark中可用的转换和操作的完整列表,请查看此doc