Spark好在哪里?
Spark的中间数据放到内存中,对于迭代运算效率更高。
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的数据集操作类型有很多
①Transformations转换操作:map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等。
②actions行动操作:Count, collect, reduce, lookup, save等。
例:一个Spark的“Hello World”程序
读取一个HDFS文件,计算包含字符串“Hello World”行数
val sc= new SparkContext(“spark://localhost:7077”,”Hello World”, “YOUR_SPARK_HOME”,”YOUR_APP_JAR”)
val fileRDD = sc.textFile(“hdfs://192.168.0.103:9000/examplefile”)
val filterRDD = fileRDD.filter(_.contains(“Hello World”))
filterRDD.cache()
filterRDD.count()
//创建SparkContext对象
在spark程序运行起来后,程序就会创建sparkContext,解析用户的代码,当遇到action算的时候开始执行程序,但是在执行之前还有很多前提工作要在sparkContext中做的。
val fileRDD = sc.textFile(“hdfs://192.168.0.103:9000/examplefile”)
//从HDFS文件中读取数据创建一个RDD
RDD是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区,每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算。RDD提供了一种高度受限的共享内存模型.
val filterRDD = fileRDD.filter(_.contains(“Hello World”))
//对fileRDD进行转换操作得到一个新的RDD,即filterRDD。
filterRDD.cache()
//对filterRDD进行持久化
把它保存在内存或磁盘中(这里采用cache接口把数据集保存在内存中),方便后续重复使用,当数据被反复访问时ÿ