为什么不建议使用并行方法创建emptrdd



我正在学习Apache- Spark并尝试创建一个空的RDD。我有以下方法来创建一个空的RDD:

1. JavaRDD<String> emptyRDD = sc.emptyRDD();
2. List<String> emptyList = new ArrayList<String>();
   JavaRDD<String> emptyParallelRDD = sc.parallelize(emptyList, 1);

和该代码在两种情况下都可以很好地效果,没有错误,也没有例外。

,但从平行方法的文档开始:

避免使用Parallealize(Seq())创建一个空的RDD。考虑没有分区的RDD的emptrdd

我找不到任何原因。有任何帮助,为什么我们不应该并行地创建emptrdd?

EmptyRDD的分区

sc.emptyRDD[Int].getNumPartitions
// Int = 0

虽然以下将具有没有数据的默认分区数:

sc.parallelize(Seq[Int]()).getNumPartitions
// Int = 2

我的猜测是,在第一种情况下,任何涉及空RDD的工作都应该更快,因为任何分区都不会导致任何工作都无法执行。

例如,saveAsTextFile不会在第一种情况下生成零件文件,而是在第二个情况下生成两个空零件文件。

scala> sc.emptyRDD[Int].saveAsTextFile("emptyRDDTest")
scala> sc.parallelize(Seq[Int]()).saveAsTextFile("emptySeqTest")
$ hdfs dfs -ls empty*
Found 1 items
hadoop          0 2017-12-07 02:38 emptyRDDTest/_SUCCESS
Found 3 items
hadoop          0 2017-12-07 02:39 emptySeqTest/_SUCCESS
hadoop          0 2017-12-07 02:39 emptySeqTest/part-00000
hadoop          0 2017-12-07 02:39 emptySeqTest/part-00001

最新更新