数据框到RDD转换和合并问题

时间:2017-11-13 03:17:00

标签: apache-spark spark-dataframe rdd

我对shuffle和分区有一些逻辑上的怀疑。假设我有一个类似这样的Dataframe:

DataFrame groupDF = hiveContext.sql("Select col from table group by col");

在此之后,我将此数据帧转换为javaRDD,以便我可以执行一些地图操作,如下所示:

JavaRDD<Row> mappedRDD = groupDF.toJavaRDD().map();

当我这样做时,我得到一个名为 toJavaRDD 的舞台。我无法理解为什么它需要洗牌,如果我没有这个洗牌的团队也不会发生。

其他情景:

在创建数据帧后,我会使用某个值进行合并,比方说100。当我将此数据帧转换为rdd时,在javaRDD阶段启动的任务数量不是100.我做主要合并的主要目的不是减少分区和因此任务。但是,一旦我将其转换为RDD,就不会保留合并因子。我已经观察到了重新分配。

Dataframe groupDF = hiveContext.sql("Select col from table group by col").coalesce(100);
JavaRDD<Row> coalescedRDD = groupDF.toJavaRDD(); // shuffle happens and tasks are not 100. They are more than 100. 

请指导我完成这个。我有镶木地板格式的数据

更新:我明白为什么会发生洗牌。但是,当我从数据帧转换为RDD时,为什么我无法保留多个分区仍然是一个问题。

0 个答案:

没有答案