我是Spark的新手。考虑以下代码:
val rdd = sc
.objectFile[(Int, Int)]("path")
.partitionBy(new HashPartitioner(sc.defaultParallelism))
.persist()
rdd.count()
每个从文件读取的元组是否直接发送到哈希分区程序指定的分区?还是首先将整个文件读入内存而不考虑分区程序,然后根据分区程序进行分配。对我来说,前者可能会更高效,因为数据被随机洗了一次,而后者则需要两次洗牌。
请在代码中找到注释
val rdd = sc
.objectFile[(Int, Int)]("path") // Loads the whole file with default minimum partitions and default partitioner
.partitionBy(new HashPartitioner(sc.defaultParallelism)) // Re-partitions the RDD using HashPartitioner
.persist()