Apache spark 为什么我不';在Spark数据集执行中找不到跳过的阶段

Apache spark 为什么我不';在Spark数据集执行中找不到跳过的阶段,apache-spark,Apache Spark,我试图理解数据集情况下的spark执行 对于我在Spark Docs中找到的RDD- Shuffle还会在磁盘上生成大量中间文件。从Spark 1.3开始,这些文件将被保留,直到相应的RDD不再使用并被垃圾收集。这样做是为了在重新计算沿袭时不需要重新创建洗牌文件 我试着在RDD和Dataset上运行类似的东西,我没有发现在RDD中得到的Dataset执行中跳过的阶段。在代码中是否有任何需要保留洗牌的提示。我的意思是,我希望Dataset应该在作业之间共享洗牌文件。如果我将数据集转换为RDD,然后

我试图理解数据集情况下的spark执行

对于我在Spark Docs中找到的RDD-

Shuffle还会在磁盘上生成大量中间文件。从Spark 1.3开始,这些文件将被保留,直到相应的RDD不再使用并被垃圾收集。这样做是为了在重新计算沿袭时不需要重新创建洗牌文件

我试着在RDD和Dataset上运行类似的东西,我没有发现在RDD中得到的Dataset执行中跳过的阶段。在代码中是否有任何需要保留洗牌的提示。我的意思是,我希望Dataset应该在作业之间共享洗牌文件。如果我将数据集转换为RDD,然后再转换回数据集,我可以看到跳过的阶段(我使用的是spark 2.3)

Dataset rangeDs=session.range(0L,200000l);
Dataset rangePairDsGbk=rangeDs.groupByKey(新
映射函数(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共长调用(长值)引发异常{
返回值;
}
},Encoders.LONG()).reduceGroup(新的ReduceFunction()){
私有静态最终长serialVersionUID=1L;
@凌驾
公共长调用(长v1、长v2)引发异常{
返回1L;
}
});
rangePairDsGbk.count()//完全重新计算
rangePairDsGbk.count()//完全重新计算(为什么此作业要进行完全重新计算-
(计算)
JavaRDD rangeRdd=session.range(0L,200000l).toJavaRDD();
javapairdd rangepairrdrbk=rangeRdd.mapToPair(新
配对函数(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共Tuple2调用(长t)引发异常{
返回新的Tuple2(t,t);
}
}).reduceByKey(新功能2(){
私有静态最终长serialVersionUID=1L;
@凌驾
公共长调用(长v1、长v2)引发异常{
返回1L;
}
}, 200);
rangePairRddRbk.count()//完全重新计算
rangePairRddRbk.count()//部分重新计算(仅随机读取为
预期的)

仍在等待答复。。
Dataset<Long> rangeDs = session.range(0L, 2000000L);
Dataset<Tuple2<Long,Long>> rangePairDsGbk =  rangeDs.groupByKey(new 
MapFunction<Long, Long>(){

private static final long serialVersionUID = 1L;

@Override
public Long call(Long value) throws Exception {
    return value;
}
}, Encoders.LONG()).reduceGroups(new ReduceFunction<Long>() {

private static final long serialVersionUID = 1L;

@Override
public Long call(Long v1, Long v2) throws Exception {
    return 1L;
}
});
rangePairDsGbk.count(); //Full Re-Computation
rangePairDsGbk.count();//Full Re-Computation (why this job is doing Full Re- 
computation)

JavaRDD<Long> rangeRdd = session.range(0L, 2000000L).toJavaRDD();
JavaPairRDD<Long, Long> rangePairRddRbk = rangeRdd.mapToPair(new 
PairFunction<Long, Long, Long>() {

private static final long serialVersionUID = 1L;

@Override
public Tuple2<Long, Long> call(Long t) throws Exception {
    return new Tuple2<Long, Long>(t, t);
}
}).reduceByKey(new Function2<Long, Long, Long>() {

private static final long serialVersionUID = 1L;

@Override
public Long call(Long v1, Long v2) throws Exception {
    return 1L;
}
}, 200);
rangePairRddRbk.count();//Full Re-Computation
rangePairRddRbk.count();//Partial Re-Computation (Only Shuffle Read as 
Expected)