【发布时间】:2022-04-23 22:25:18
【问题描述】:
我用 Spark 编写了一个非常简单的 Sort scala 程序。
object Sort {
def main(args: Array[String]): Unit = {
if (args.length < 2) {
System.err.println("Usage: Sort <data_file> <save_file>" +
" [<slices>]")
System.exit(1)
}
val conf = new SparkConf().setAppName("BigDataBench Sort")
val spark = new SparkContext(conf)
val logger = new JobPropertiesLogger(spark,"/home/abrandon/log.csv")
val filename = args(0)
val save_file = args(1)
var splits = spark.defaultMinPartitions
if (args.length > 2){
splits = args(2).toInt
}
val lines = spark.textFile(filename, splits)
logger.start_timer()
val data_map = lines.map(line => {
(line, 1)
})
val result = data_map.sortByKey().map { line => line._1}
logger.stop_timer()
logger.write_log("Sort By Key: Sort App")
result.saveAsTextFile(save_file)
println("Result has been saved to: " + save_file)
}
}
现在,我在想,由于只有一个广泛的转换(“sortByKey”),因此将跨越两个阶段。但是,我在 Job 0 中看到了两个工作,在 Job 0 中有一个阶段,在 Job 1 中有两个阶段。我错过了什么吗?我没有得到的是第二份工作的第一阶段。它似乎和 Job 0 的阶段做同样的工作。
【问题讨论】:
标签: scala apache-spark hadoop-yarn