【原】Spark 编程指南

尊重原创,注重版权,转贴请注明原文地址: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():通过外部程序

posted on 2014-07-28 17:02  虚若怀谷  阅读(295)  评论(0编辑  收藏  举报

导航