03-第一個Spark程序WordCount

Scala版

1)創建項目

增加 Scala 插件

Spark 由 Scala 語言開發的,咱們當前使用的 Spark 版本為 3.2.0,默認采用的 Scala 編譯版本為 2.13,所以后續開發時。我們依然采用這個版本。開發前請保證 IDEA 開發工具中含有 Scala 開發插件

創建Maven工程

創建Maven Project工程,GAV如下:

GroupIdArtifactIdVersion
com.clear.sparkbigdata-spark_2.131.0

創建Maven Module工程,GAV如下:

GroupIdArtifactIdVersion
com.clear.sparkspark-core1.0

POM

<repositories><!-- 指定倉庫的位置,依次為aliyun、cloudera、jboss --><repository><id>aliyun</id><url>http://maven.aliyun.com/nexus/content/groups/public/</url></repository><repository><id>cloudera</id><url>https://repository.cloudera.com/artifactory/cloudera-repos/</url></repository><repository><id>jboss</id><url>https://repository.jboss.com/nexus/content/groups/public/</url></repository>
</repositories><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><scala.version>2.13.5</scala.version><scala.binary.version>2.13</scala.binary.version><spark.version>3.2.0</spark.version><hadoop.version>3.1.3</hadoop.version>
</properties><dependencies><!-- 依賴Scala語言--><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>${scala.version}</version></dependency><!-- Spark Core 依賴 --><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_${scala.binary.version}</artifactId><version>${spark.version}</version></dependency><!-- Hadoop Client 依賴 --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>${hadoop.version}</version></dependency>
</dependencies><build><outputDirectory>target/classes</outputDirectory><testOutputDirectory>target/test-classes</testOutputDirectory><resources><resource><directory>${project.basedir}/src/main/resources</directory></resource></resources><plugins><!-- maven 編譯插件--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.10.1</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>UTF-8</encoding></configuration></plugin><!-- 該插件用于將 Scala 代碼編譯成 class 文件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><!-- 聲明綁定到 maven 的 compile 階段 --><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin></plugins>
</build>
<dependencies><!-- spark-core依賴--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.13</artifactId><version>3.2.0</version></dependency>
</dependencies>
<build><plugins><!-- 該插件用于將 Scala 代碼編譯成 class 文件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version><executions><execution><!-- 聲明綁定到 maven 的 compile 階段 --><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>

配置文件

在src/main/resources目錄下放置如下三個文件,可以從服務器中拷貝:

  • core-site.xml
  • hdfs-site.xml
  • log4j.properties

3)代碼編寫

package com.clear.sparkimport org.apache.spark.{SparkConf, SparkContext}/*** 使用Scala語言使用SparkCore編程實現詞頻統計:WordCount* 從HDFS上讀取文件,統計WordCount,將結果保存在HDFS上*/
object SparkWordCount {def main(args: Array[String]): Unit = {// todo 創建SparkContext對象,需要傳遞SparkConf對象,設置應用配置信息val conf = new SparkConf().setAppName("詞頻統計").setMaster("local[2]")val sc = new SparkContext(conf)// todo 讀取數據,封裝數據到RDDval inputRDD = sc.textFile("/opt/data/wc/README.md")// 分析數據,調用RDD算子val resultRDD = inputRDD.flatMap(line => line.split("\\s+")).map(word => (word, 1)).reduceByKey((tmp, item) => tmp + item)// 保存數據,將最終RDD結果數據保存至外部存儲系統resultRDD.foreach(tuple => println(tuple))resultRDD.saveAsTextFile(s"/opt/data/wc-${System.nanoTime()}")// 應用程序結束,關閉資源sc.stop()}
}

4)測試

[nhk@kk01 wordcount]$ $SPARK_HOME/bin/spark-submit --class com.clear.WordCount /opt/data/wordcount/spark-core-scala-1.0.jar 

Java版

1)POM

<dependencies><!-- spark-core依賴--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.13</artifactId><version>3.2.0</version><scope>provided</scope></dependency>
</dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><configuration><archive><manifest><!-- mainClass標簽填寫主程序入口--><mainClass>com.clear.demo1.CreateFileUtil</mainClass><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest></archive><classesDirectory></classesDirectory></configuration></plugin><!-- 復制依賴文件到編譯目錄中 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.1</version><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins>
</build>

2)代碼

package com.clear.wordcount;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 scala.Tuple2;import java.util.Arrays;public class JavaSparkWordCount {public static void main(String[] args) {// 創建 SparkConf 對象配置應用SparkConf conf = new SparkConf().setAppName("JavaSparkWordCount").setMaster("local");// 基于 SparkConf 創建 JavaSparkContext 對象JavaSparkContext jsc = new JavaSparkContext(conf);// 加載文件內容JavaRDD<String> lines = jsc.textFile("file:///opt/data/wordcount/README.md");// 轉換為單詞 RDDJavaRDD<String> words = lines.flatMap(line ->Arrays.asList(line.split(" ")).iterator());// 統計每個單詞出現的次數JavaPairRDD<String, Integer> counts = words.mapToPair(word -> new Tuple2<>(word, 1)).reduceByKey((x, y) -> (x + y));// 輸出結果counts.saveAsTextFile("file:///opt/data/wordcount/wc");// 關閉 JavaSparkContext 對象jsc.stop();}
}

3)測試

運行:

[nhk@kk01 wordcount]$ $SPARK_HOME/bin/spark-submit --class com.clear.wordcount.JavaSparkWordCount /opt/data/wordcount/spark-core-demo-1.0.jar 

查看結果:

[nhk@kk01 wc]$ pwd
/opt/data/wordcount/wc
[nhk@kk01 wc]$ ll
total 8
-rw-r--r--. 1 nhk nhk 4591 Jul 30 17:48 part-00000
-rw-r--r--. 1 nhk nhk    0 Jul 30 17:49 _SUCCESS
[nhk@kk01 wc]$ head part-00000 
(package,1)
(For,3)
(Programs,1)
(processing.,2)
(Because,1)
(The,1)
(cluster.,1)
(its,1)
([run,1)
(APIs,1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ebay燈串UL報告 UL588檢測標準

季節性和裝飾性照明用品即燈串以及配件都是便攜式插頭連接的臨時性商品&#xff0c;最大額定輸入電壓為 120 伏。 由 ILAC ISO 17025 認證的實驗室出具的檢測報告&#xff0c;確認每件商品均已經過檢測&#xff0c;符合下列要求&#xff1a; 季節性和裝飾性照明用品(燈串&…

企業中商業智能BI,常見的工具和技術

商業智能&#xff08;Business Intelligence&#xff0c;簡稱BI&#xff09;數據可視化是通過使用圖表、圖形和其他可視化工具來呈現和解釋商業數據的過程。它旨在幫助組織更好地理解和分析他們的數據&#xff0c;從而做出更明智的商業決策。 常見的商業智能數據可視化工具和技…

AtcoderABC222場

A - Four DigitsA - Four Digits 題目大意 給定一個整數N&#xff0c;其范圍在0到9999之間&#xff08;包含邊界&#xff09;。在將N轉換為四位數的字符串后&#xff0c;輸出它。如果N的位數不足四位&#xff0c;則在前面添加必要數量的零。 思路分析 可以使用輸出流的格式設…

鼠標樣式和指向

學習抖音&#xff1a; 渡一前端教科頻道 圖上指針跟著鼠標移動&#xff0c;并且改變方向 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><style>* {padding: 0;margin: 0;}.arrow {position: fixed;width: 3…

Spring Clould 消息隊列 - RabbitMQ

視頻地址&#xff1a;微服務&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初識MQ-同步通訊的優缺點&#xff08;P61&#xff0c;P62&#xff09; 同步和異步通訊 微服務間通訊有同步和異步兩種方式&#xff1a; 同步通訊&#xff1a;就像打電話&…

數據庫名字添加中文

Jetbrains 可以呀&#xff0c;這個ui 相當棒 from database import Sqlite3Database from googletrans import Translator import csvif __name__ "__main__":TRANS_EN2ZH Falsetranslator Translator()sqlite Sqlite3Database("./drurmu.db")sqlite.r…

x.view(a,b)及x = x.view(x.size(0), -1) 的理解說明

x.view()就是對tensor進行reshape&#xff1a; 我們在創建一個網絡的時候&#xff0c;會在Foward函數內看到view的使用。 首先這里是一個簡單的網絡&#xff0c;有卷積和全連接組成。它的foward函數如下&#xff1a; class NET(nn.Module):def __init__(self,batch_size):sup…

小米交卷大模型,全新小愛同學實測來了

本文源自&#xff1a;量子位 果然只有雷軍和小米&#xff0c;能搶走風口上大模型的熱度。 在雷軍的年度演講分享中&#xff0c;講武大求學經歷&#xff0c;分享學霸4年大學2年完課經驗&#xff1b;講被《硅谷之火》點燃&#xff0c;勤奮練習寫最好的代碼&#xff0c;開啟第一…

armbian使用1panel快速部署部署springBoot項目后端

文章目錄 前言環境準備實現步驟第一步&#xff1a;Armbian安裝1panel第二步&#xff1a;安裝數據庫第三步&#xff1a;查看數據庫容器重要信息【重要】查看容器所在的網絡查看容器連接地址 第四步&#xff1a;項目配置和打包第五步:構建項目鏡像 前言 這里只是簡單記錄部署spr…

一次性解決office部署問題(即點即用等)

前言 因為之前電腦安裝了office2019&#xff0c;后面需要安裝Visio&#xff0c;下載安裝時報錯30204-44,查看發現之前安裝的office版本是即點即用版&#xff0c;可能這兩者不兼容。網上搜索教程等&#xff0c;最后發現一個工具&#xff1a;Office Tool Plus&#xff0c;可以方便…

【水文學法總結】河道內生態流量計算方法(含MATLAB實現代碼)

生態流量&#xff08;Ecological Flow, EF&#xff09; 是指維持河道內生態環境所需要的水流流量。生態流量計算方法眾多&#xff0c;主要分為水文學方法、棲息地模擬法、水力學方法、整體法等&#xff0c;各方法多用于計算維持河道生態平衡的最小生態流量&#xff08;Minimum …

LeetCode 141.環形鏈表

文章目錄 &#x1f4a1;題目分析&#x1f4a1;解題思路&#x1f514;接口源碼&#x1f4a1;深度思考?思考1?思考2 題目鏈接&#x1f449; LeetCode 141.環形鏈表&#x1f448; &#x1f4a1;題目分析 給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 如果鏈表中…

【ES6】—let 聲明方式

一、不屬于頂層對象window let 關鍵字聲明的變量&#xff0c;不會掛載到window的屬性 var a 5 console.log(a) console.log(window.a) // 5 // 5 // 變量a 被掛載到window屬性上了 &#xff0c; a window.alet b 6 console.log(b) console.log(window.b) // 6 // undefin…

原生js獲取今天、昨天、近7天的時間(年月日時分秒)

有的時候我們需要將今天,昨天,近7天的時間(年月日時分秒)作為參數傳遞給后端,如下圖: 那怎么生成這些時間呢?如下代碼里,在methods里的toDay方法、yesterDay方法、weekDay方法分別用于生成今天、昨天和近7天的時間: <template><div class="box"&…

暫停Windows更新的方法,可延后數十萬年,簡單且有手就行

前言 近年來&#xff0c;Windows更新頻率過快&#xff0c;最大只能暫停更新5周&#xff0c;導致用戶不厭其煩&#xff0c;從網上找到的暫停更新的方法不是過于繁瑣就是毫無效果&#xff0c;或者是暫停的時間有限&#xff0c;無意中發現一個大神的帖子可以通過修改注冊表信息以達…

Java定時任務方案

一、Timer import java.util.Timer; import java.util.TimerTask;public class TimerExample {public static void main(String[] args) {Timer timer new Timer();TimerTask task new TimerTask() {Overridepublic void run() {System.out.println("Task executed at:…

uni-app自定義多環境配置,動態修改appid

背景 在企業級項目開發中&#xff0c;一般都會分為開發、測試、預發布、生產等多個環境&#xff0c;在工程化中使用不同的打包命令改變環境變量解決不同環境各種變量需要手動修改的問題&#xff0c;比如接口請求地址&#xff0c;不同環境的請求路徑前綴都是不同的。在使用uni-…

Docker中為RabbitMQ安裝rabbitmq_delayed_message_exchange延遲隊列插件

1、前言 rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延遲消息傳遞&#xff08;或計劃消息傳遞&#xff09;的插件。 插件下載地址&#xff1a;https://www.rabbitmq.com/community-plugins.html 1、下載插件 首先需要確定我們當前使用的RabbitMQ的版本&#xff0c…

Android隱藏輸入法

1、方法一(如果輸入法在窗口上已經顯示&#xff0c;則隱藏&#xff0c;反之則顯示) InputMethodManager imm (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 2、方法二(view為接受軟…