Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 火花DAG级数_Apache Spark_Rdd - Fatal编程技术网

Apache spark 火花DAG级数

Apache spark 火花DAG级数,apache-spark,rdd,Apache Spark,Rdd,在使用spark RDD时,我知道每次我们有一个ShufferDD时都会创建一个新阶段,但是当我们有多个动作时是否会创建一个新阶段 例如: val rdd1 = sc.textFile("<some_path").keyBy(x=>x.split(",")(1)) val rdd2 = sc.textFile("<some_path").keyBy(x=>x.split(",")(1)) val rdd3 = rdd1.join(rdd2) rdd3.filter(

在使用spark RDD时,我知道每次我们有一个ShufferDD时都会创建一个新阶段,但是当我们有多个动作时是否会创建一个新阶段

例如:

val rdd1 = sc.textFile("<some_path").keyBy(x=>x.split(",")(1))

val rdd2 = sc.textFile("<some_path").keyBy(x=>x.split(",")(1))

val rdd3 = rdd1.join(rdd2)

rdd3.filter(x=><somecondition1>).saveAsTextFile("location1")
rdd3.filter(x=><somecondition2>).saveAsTextFile("location2")

val rdd1=sc.textFile(“几个月前我实际上问了一个类似的问题

在您的情况下,rdd3调用转换。因此,创建rdd1和rdd2的操作将在您声明rdd3时发生。后续转换将在每次保存时发生(特别是筛选),但rdd1和rdd2不会作为操作再次运行

如果在运行保存之前缓存数据,则会产生类似的效果


我不知道您使用的是哪个版本的Spark,但您可以从文档中找到相关信息。至少1.6+版本是相同的。

Stage2只有一个保存操作

在您的代码中,
saveAsTextFile
是一个操作,它将调用spark来计算您的rdd沿袭。换句话说,spark将只执行此代码,直到找到它为止。
saveAsTextFile
。然后将创建阶段和任务并提交给执行者

由于您的代码有两个
saveAsTextFile
s,并且您从未缓存过任何中间RDD,因此在这种情况下,rdd1、rdd2、rdd3将计算两次

阶段是作业中的一个概念,一个操作调用一个作业,所以阶段不可能包含两个操作