spark java 範例程式碼wordcount

來源:互聯網
上載者:User

標籤:scala集合   fun   reac   大資料   tsp   名稱   div   適合   wordcount   

import java.util.Arrays;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.JavaSparkContext;import org.apache.spark.api.java.function.FlatMapFunction;import org.apache.spark.api.java.function.Function2;import org.apache.spark.api.java.function.PairFunction;import org.apache.spark.api.java.function.VoidFunction;import scala.Tuple2;/** * 使用Java的方式開發進行本地測試Spark的WordCount程式 * * @author DT大資料夢工廠 http://weibo.com/ilovepains */public class WordCountSpk {  public static void main(String[] args) {    /**     * 第1步:建立Spark的設定物件SparkConf,設定Spark程式的運行時的配置資訊,     * 例如說通過setMaster來設定程式要連結的Spark叢集的Master的URL,如果設定     * 為local,則代表Spark程式在本地運行,特別適合於機器配置條件非常差(例如 只有1G的記憶體)的初學者 *     */    SparkConf conf = new SparkConf().setAppName("Spark WordCount written by Java").setMaster("local");    /**     * 第2步:建立SparkContext對象     * SparkContext是Spark程式所有功能的唯一入口,無論是採用Scala、Java、Python     * 、R等都必須有一個SparkContext(不同的語言具體的類名稱不同,如果是Java的話則為JavaSparkContext)     * SparkContext核心作用:初始化Spark應用程式運行所需要的核心組件,包括DAGScheduler、TaskScheduler、     * SchedulerBackend 同時還會負責Spark程式往Master註冊程式等     * SparkContext是整個Spark應用程式中最為至關重要的一個對象     */    JavaSparkContext sc = new JavaSparkContext(conf); // 其底層實際上就是Scala的SparkContext    /**     * 第3步:根據具體的資料來源(HDFS、HBase、Local FS、DB、S3等)通過JavaSparkContext來建立JavaRDD     * JavaRDD的建立基本有三種方式:根據外部的資料來源(例如HDFS)、根據Scala集合、由其它的RDD操作     * 資料會被RDD劃分成為一系列的Partitions,分配到每個Partition的資料屬於一個Task的處理範疇     * 注意:檔案路徑不能直接用Windows路徑中的反斜扛\,要改成Linux下的斜扛/     */    JavaRDD<String> lines = sc        .textFile("D:/hu.txt");    /**     * 第4步:對初始的JavaRDD進行Transformation層級的處理,例如map、filter等高階函數等的編程,來進行具體的資料計算     * 第4.1步:講每一行的字串拆分成單個的單詞     */    JavaRDD<String> words = lines        .flatMap(new FlatMapFunction<String, String>() { // 如果是Scala,由於SAM轉換,所以可以寫成val          // words =          // lines.flatMap          // { line =>          // line.split(" ")}          public Iterable<String> call(String line) throws Exception {            return Arrays.asList(line.split(" "));          }        });    /**     * 第4步:對初始的JavaRDD進行Transformation層級的處理,例如map、filter等高階函數等的編程,來進行具體的資料計算     * 第4.2步:在單詞拆分的基礎上對每個單詞執行個體計數為1,也就是word => (word, 1)     */    JavaPairRDD<String, Integer> pairs = words        .mapToPair(new PairFunction<String, String, Integer>() {          public Tuple2<String, Integer> call(String word)              throws Exception {            return new Tuple2<String, Integer>(word, 1);          }        });    /**     * 第4步:對初始的RDD進行Transformation層級的處理,例如map、filter等高階函數等的編程,來進行具體的資料計算     * 第4.3步:在每個單詞執行個體計數為1基礎之上統計每個單詞在檔案中出現的總次數     */    JavaPairRDD<String, Integer> wordsCount = pairs        .reduceByKey(new Function2<Integer, Integer, Integer>() { // 對相同的Key,進行Value的累計(包括Local和Reducer層級同時Reduce)          public Integer call(Integer v1, Integer v2)              throws Exception {            return v1 + v2;          }        });    wordsCount.foreach(new VoidFunction<Tuple2<String, Integer>>() {      public void call(Tuple2<String, Integer> pairs) throws Exception {        System.out.println(pairs._1 + " : " + pairs._2);      }    });    sc.close();  }}

 

spark java 範例程式碼wordcount

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.