zoukankan      html  css  js  c++  java
  • 【原】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():通过外部程序
  • 相关阅读:
    Python 类的特性讲解
    Python 类的式列化过程解剖
    Python 面向对象介绍
    Python subprocess模块
    Python re模块
    Python configparser模块
    Python pyYAML模块
    Python logging模块
    Python hashlib模块
    OAuth2.0 错误码
  • 原文地址:https://www.cnblogs.com/downtjs/p/3873512.html
Copyright © 2011-2022 走看看