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
Apache spark 理解Spark中的持久性_Apache Spark_Caching_Rdd - Fatal编程技术网

Apache spark 理解Spark中的持久性

Apache spark 理解Spark中的持久性,apache-spark,caching,rdd,Apache Spark,Caching,Rdd,我对Spark还比较陌生,在这方面我也有点怀疑:- 以下是我正在尝试的代码:- import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.function.Function; import org.apache.spark.api.ja

我对Spark还比较陌生,在这方面我也有点怀疑:-

以下是我正在尝试的代码:-

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.Function2;

/**
 * Computes an approximation to pi
 * Usage: JavaSparkPi [slices]
 */
public final class JavaSparkPi {

    public static void main(String[] args) throws Exception {

        SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi").setMaster("local[4]");


        JavaSparkContext jsc = new JavaSparkContext(sparkConf);

        JavaRDD<String> data = jsc.textFile("/Users/sanchay/Desktop/2017-08-08");


        while(true) {

            Thread.sleep(1000);

                    int count = data.map(s -> s.length()).reduce((a, b) -> (a + b));
            System.out.println("count == " + count);

        }

      //  jsc.stop();

    }
}
import org.apache.spark.SparkConf;
导入org.apache.spark.api.java.JavaRDD;
导入org.apache.spark.api.java.JavaSparkContext;
导入org.apache.spark.api.java.function.function;
导入org.apache.spark.api.java.function.Function2;
/**
*计算pi的近似值
*用法:JavaSparkPi[slices]
*/
公共最终类JavaSparkPi{
公共静态void main(字符串[]args)引发异常{
SparkConf SparkConf=new SparkConf().setAppName(“JavaSparkPi”).setMaster(“本地[4]”);
JavaSparkContext jsc=新的JavaSparkContext(sparkConf);
javarddata=jsc.textFile(“/Users/sanchay/Desktop/2017-08-08”);
while(true){
睡眠(1000);
int count=data.map(s->s.length()).reduce((a,b)->(a+b));
System.out.println(“计数=”+计数);
}
//jsc.stop();
}
}
1) 由于我目前在本地模式下运行,每次迭代所花费的时间都在减少(文件大小约为150MB)。这是因为每次缓存RDD时。我想知道什么时候我会在远程节点集群上运行它,我是否会经历同样的行为,因为没有必要让同一个节点得到它以前计算过的相同分区


2) 此外,我试图取消持久化上面的“data”变量,但是,我注意到所用的时间没有差异,因为从第一次迭代到第二次迭代的时间减少了,这意味着缓存了某个地方。所以,它是否还在以某种方式被缓存,或者我在这里遗漏了一些明显的东西。

我认为由于操作系统缓存机制,在以后的迭代中它会变得更快。简单地说,当您读取文件时,文件系统模块会将其内容放在某个内存位置,以便下次进行更快的访问。您不显式缓存RDD,因此它不在内存中,每次运行它时,首先再次读取内容文件,然后执行映射,减少操作…,但文件内容位于快速访问的位置,因此以后的运行将得到加速。

不,它不会
持久()
默认情况下,我们必须提到在没有外部方法的情况下要持久化的
RDD
,spark不会持久化任何东西

您可以像这样持久化RDD

import org.apache.spark.storage.StorageLevel 

val source = s.map(rec => (rec.split(",")(0), rec)).persist(StorageLevel.MEMORY_ONLY)
 //DISK_ONLY,MEMORY_AND_DISK,MEMORY_AND_DISK_SER etc

默认缓存将发生在内存中,我们可以将其命名为
val rdd1=a.cache()

您的示例与Spark中的持久性无关。如果在单个Spark应用程序中调用rdd.cache()或rdd.persist(),就会发生这种情况(请参阅)。Spark应用程序运行与另一个运行没有任何交互。你所说的“我试图取消保存‘数据’”是什么意思?我在这里有一个疑问。当循环第二次运行时,“data”变量会再次读取文件,还是从缓存中拾取?啊,对不起,我误解了,我的错误。我以为你的意思是你再次运行了整个应用程序。您可以在Spark UI中看到Spark在引擎盖下做什么:您将看到“DAG”和作业/任务/阶段。它可能会帮助你@从spark的角度来看,Sanchay将再次读取文件。谢谢,现在已经很清楚了。也与文档产生共鸣:-。一旦我获得了足够的声誉,我就会投票。:我很高兴这有帮助:)嘿,维涅什,我有一个小疑问。如果我有javarddata2=jsc.textFile(“/Users/sanchay/Desktop/2017-08-08”);JavaRDD countRDD=data2.map(s->s.length());然后每次在代码中访问countRDD时,它都会再次打开该文件,对吗?如果我缓存countRDD,那么它将从缓存中提取?
data2.map
是一种传输格式,只有在执行类似于
收集、保存、获取等操作时,它才会访问该文件。是的,如果您经常访问condudrdd而不将其持久化,则每次访问都会读取该文件,如果数据较小,最好在内存中持久化。