Spark(一)—— 大数据处理入门
一、Spark介绍#
Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set of higher-level tools including Spark SQL for SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.
Spark是一个快速且多功能的集群计算系统。它为多种不同语言提供高级API,和支持一般执行图的优化引擎。它也有丰富的高级工具集,Spark SQL进行结构化数据的处理,MLib处理机器学习,GraphX进行图处理,以及Spark Streaming流计算。
组成#
它的主要组件有:
- SparkCore
- 将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
- SparkSQL
- Spark Sql 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。
- SparkStreaming
- 是Spark提供的实时数据进行流式计算的组件。
- MLlib
- 提供常用机器学习算法的实现库。
- GraphX
- 提供一个分布式图计算框架,能高效进行图计算。
- BlinkDB
- 用于在海量数据上进行交互式SQL的近似查询引擎。
- Tachyon
- 以内存为中心高容错的的分布式文件系统。
返回一个包含数据集前n个元素的数组
二、WordCount程序讲解#
编写代码
scala程序编写#
object WordCountDemo { def main(args: Array[String]): Unit = { //创建Spark配置对象 val conf = new SparkConf().setMaster("local").setAppName("MyApp") //通过conf创建sc val sc = new SparkContext(conf) //读取文件 val rdd1 = sc.textFile("/Users/README.md") //计算 val rdd2 = rdd1.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_) //打印 rdd2.take(10).foreach(println) } }
java程序编写#
public class WordCountJavaDemo { public static void main(String[] args) { SparkConf conf = new SparkConf(); conf.setAppName("myapp").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> rdd1 = sc.textFile("/Users/README.md"); JavaRDD<String> rdd2 = rdd1.flatMap(new FlatMapFunction<String, String>() { @Override public Iterator<String> call(String s) throws Exception { List<String> list = new ArrayList<>(); String[] arr = s.split(" "); for (String ss : arr) { list.add(ss); } return list.iterator(); } }); JavaPairRDD<String, Integer> rdd3 = rdd2.mapToPair(new PairFunction<String, String, Integer>() { @Override public Tuple2<String, Integer> call(String s) throws Exception { return new Tuple2<String, Integer>(s, 1); } }); JavaPairRDD<String, Integer> rdd4 = rdd3.reduceByKey(new Function2<Integer, Integer, Integer>() { @Override public Integer call