尊重原创,注重版权,转贴请注明原文地址:http://www.cnblogs.com/vincent-hv/p/3322966.html
1、配置程序使用资源:
System.setProperty("spark.executor.memary", "512m")
2、创建自己的SparkContext对象:
val sc = new SparkContext("master", "Job name", "$SPARK_HOME", "Job JARs")
3、创建RDDs
sc.parallelize(List(1, 2, 3)) // 将scala原生的集合转换成RDD sc.textFile("directory/*.txt") // 将本地磁盘上的文本转换成RDD sc.testFile("hdfs://namenode:port/path/file") // 将分布式文件系统上的文件转换成RDD
4、基本的RDD Transformations操作:
val nums = sc.parallelize(List(1, 2, 3)) val squares = nums.map(x => x * x) // {1, 4, 9} val even = squares.filter(_ % 2 == 0) // {4} nums.flatMap(x => 1 to x) // {1, 1, 2, 1, 2, 3}
5、基本的Actions操作:
val nums = sc.parallelize(List(1, 2, 3)) nums.collect() // Array(1, 2, 3) nums.take(2) // Array(1, 2) nums.count() // 3 nums.reduce(_ + _) // 6 nums.saveAsTextFile("hdfs://file.txt")
6、针对Key-Value对的作业:
val pair = (a, b) pair._1 // a pair._2 // b
7、一些Key-Value对的操作:
val pets = sc.parallelize(List(("cat", 1), ("dog", 1), ("cat", 2))) pets.reduceByKey(_ + _) // {(cat, 3), (dog, 1)} pets.groupByKey() // {(cat, Seq(1, 2)), (dog, 1)} pets.sortByKey() // {(cat, 1), (cat, 2), (dog, 1)}
8、其他Key-Value的操作:
val visits = sc.parallelize(List(("index.html", "1.2.3.4"), ("about.html", "3.4.5.6"), ("index.html", 1.3.3.1))) val pageNames = sc.parallelize(List(("index.html", "Home"), ("about.html", "About"))) visits.join(pageNames) // ("index.html", ("1.2.3.4", "Hmoe")) // ("index.html", ("1.3.3.1", "Home")) // ("about.html", ("3.4.5.6", "About")) vlisits.cogroup(pageNames) // ("index.html", (Seq("1.2.3.4", 1.3.3.1), Seq("Home"))) // ("about.html", (Seq("3.4.5.6"), Seq("About")))
9、控制Reduce Tasks的数量:
所有的RDD组操作都可以选择设置第二个参数来控制tasks的数量
words.reduceByKey(_ + _, 5) words.groupByKey(5) visits.join(pageViews, 5)
当然,也可以通过设置spark.default.parallelism属性值来控制
10、使用本地变量:
在闭包中你使用任何外部变量都将自动的传递到集群:
val query = Console.readLine()
pages.filter(_.contains(query)).count()
一些注意事项:
- Each task gets a new copy(updates aren`t sent bask)
- 变量必须序列化
- 不要使用一个对象的外部域
11、集群中有较大危害的示例:
12、其他RDD操作:
- sample():确定样本子集
- union():合并两个RDD
- cartesian():交叉乘积
- pipe():通过外部程序