好程式設計師大資料教程:SparkShell和IDEA中編寫Spark程式
好程式設計師大資料教程: SparkShell 和 IDEA 中編寫 Spark 程式, spark-shell是Spark自帶的互動式Shell程式,方便使用者進行互動式程式設計,使用者可以在該命令列下用Scala編寫Spark程式。spark-shell程式一般用作Spark程式測試練習來用。spark-shell屬於Spark的特殊應用程式,我們可以在這個特殊的應用程式中提交應用程式
spark-shell啟動有兩種模式,local模式和cluster模式,分別為
local 模式 :
spark-shell
local模式僅在本機啟動一個SparkSubmit程式,沒有與叢集建立聯絡,雖然程式中有SparkSubmit但是不會被提交到叢集紅
Cluster
模式
(
叢集模式
):
spark-shell \
--master spark://hadoop01:7077 \
--executor-memory 512m \
--total-executor-cores 1
後兩個命令不是必須的
--master
這條命令是必須的
(
除非在
jar
包中已經指可以不指定
,
不然就必須指定
)
退出 shell
千萬不要ctrl+c spark-shell 正確退出 :quit 千萬不要ctrl+c退出 這樣是錯誤的 若使用了ctrl+c退出 使用命令檢視監聽埠 netstat - apn | grep 4040 在使用kill -9 埠號 殺死即可
3.25.11 spark2.2shell 和 spark1.6shell 對比
ps:啟動spark-shell若是叢集模式,在webUI會有一個一直執行的任務
透過 IDEA 建立 Spark 工程
ps:工程建立之前步驟省略,在scala中已經講解,直接預設是建立好工程的
對工程中的 pom.xml 檔案配置
<!--
宣告公有的屬性
-->
<properties>
<maven.compiler.source>
1.8
</maven.compiler.source>
<maven.compiler.target>
1.8
</maven.compiler.target>
<encoding>
UTF-8
</encoding>
<scala.version>
2.11.8
</scala.version>
<spark.version>
2.2.0
</spark.version>
<hadoop.version>
2.7.1
</hadoop.version>
<scala.compat.version>
2.11
</scala.compat.version>
</properties>
<!--
宣告並引入公有的依賴
-->
<dependencies>
<dependency>
<groupId>
org.scala-lang
</groupId>
<artifactId>
scala-library
</artifactId>
<version>
${scala.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.spark
</groupId>
<artifactId>
spark-core_2.11
</artifactId>
<version>
${spark.version}
</version>
</dependency>
<dependency>
<groupId>
org.apache.hadoop
</groupId>
<artifactId>
hadoop-client
</artifactId>
<version>
${hadoop.version}
</version>
</dependency>
</dependencies>
Spark實現 WordCount 程式
Scala版本
import
org.
apache
.
spark
.
rdd
.
RDD
import
org.
apache
.
spark
.{SparkConf, SparkContext}
object
SparkWordCount {
def
main
(args: Array[String]): Unit = {
val
conf =
new
SparkConf
().
setAppName
(
"
dri/wordcount
"
)
.setMaster(
"
local[*]
"
)
//
建立
sparkContext
物件
val
sc =
new
SparkContext
(conf)
//
透過
sparkcontext
物件就可以處理資料
//
讀取檔案 引數是一個
String
型別的字串 傳入的是路徑
val
lines: RDD[String] = sc.
textFile
(
“
dir/wordcount
”
)
//
切分資料
val
words: RDD[String] = lines.
flatMap
(_.
split
(
" "
))
//
將每一個單詞生成元組
(
單詞
,1)
val
tuples: RDD[(String, Int)] = words.
map
((_,
1
))
//spark
中提供一個運算元
reduceByKey
相同
key
為一組進行求和 計算
value
val
sumed: RDD[(String, Int)] = tuples.
reduceByKey
(_+_)
//
對當前這個結果進行排序
sortBy
和
scala
中
sotrBy
是不一樣的 多了一個引數
//
預設是升序
false
就是降序
val
sorted: RDD[(String, Int)] = sumed.
sortBy
(_._
2
,
false
)
//
將資料提交到叢集儲存 無法返回值
sorted.foreach(println)
//
回收資源停止
sc,
結束任務
sc.
stop
()
}
}
Java 版本
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
scala.
Tuple2
;
import
java.
util
.
Arrays
;
import
java.
util
.
Iterator
;
import
java.
util
.
List
;
public
class
JavaWordCount {
public static void
main
(String[] args) {
//1.
先建立
conf
物件進行配置主要是設定名稱
,
為了設定執行模式
SparkConf conf =
new
SparkConf
().
setAppName
(
"JavaWordCount"
).
setMaster
(
"local"
);
//2.
建立
context
物件
JavaSparkContext jsc =
new
JavaSparkContext
(conf);
JavaRDD<String> lines = jsc.
textFile
(
"dir/file"
);
//
進行切分資料
flatMapFunction
是具體實現類
JavaRDD<String> words = lines.
flatMap
(
new
FlatMapFunction<String, String>() {
@Override
public Iterator<String>
call
(String s) throws Exception {
List<String> splited = Arrays.
asList
(s.
split
(
" "
));
return
splited.
iterator
();
}
});
//
將資料生成元組
//
第一個泛型是輸入的資料型別 後兩個引數是輸出引數元組的資料
JavaPairRDD<String, Integer> tuples = words.
mapToPair
(
new
PairFunction<String, String,
Integer>() {
@Override
public Tuple2<String, Integer>
call
(String s) throws Exception {
return
new
Tuple2<String, Integer>(s,
1
);
}
});
//
聚合
JavaPairRDD<String, Integer> sumed = tuples.
reduceByKey
(
new
Function2<Integer, Integer,
Integer>() {
@Override
//
第一個
Integer
是相同
key
對應的
value
//
第二個
Integer
是相同
key
對應的
value
public Integer
call
(Integer v1, Integer v2) throws Exception {
return
v1 + v2;
}
});
//
因為
Java api
沒有提供
sortBy
運算元
,
此時需要將元組中的資料進行位置調換
,
然後在排序
,
排完序在換回
//
第一次交換是為了排序
JavaPairRDD<Integer, String> swaped = sumed.
mapToPair
(
new
PairFunction<Tuple2<String,
Integer>, Integer, String>() {
@Override
public Tuple2<Integer, String>
call
(Tuple2<String, Integer> tup) throws Exception {
return
tup.
swap
();
}
});
//
排序
JavaPairRDD<Integer, String> sorted = swaped.
sortByKey
(
false
);
//
第二次交換是為了最終結果
<
單詞
,
數量
>
JavaPairRDD<String, Integer> res = sorted.
mapToPair
(
new
PairFunction<Tuple2<Integer,
String>, String, Integer>() {
@Override
public Tuple2<String, Integer>
call
(Tuple2<Integer, String> tuple2) throws Exception
{
return
tuple2.
swap
();
}
});
System.
out
.
println
(res.
collect
());
res.
saveAsTextFile
(
"out1"
);
jsc.
stop
();
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2645955/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師分享大資料入門教程:Hadoop和spark的效能比較程式設計師大資料HadoopSpark
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料教程Scala系列之類程式設計師大資料
- 好程式設計師大資料分享Spark任務和叢集啟動流程程式設計師大資料Spark
- 好程式設計師大資料教程分享大資料之流程控制程式設計師大資料
- 好程式設計師大資料培訓分享Spark技術總結程式設計師大資料Spark
- 好程式設計師大資料學習路線分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料教程Scala系列之繼承程式設計師大資料繼承
- 好程式設計師大資料教程分享:HDFS基本概念程式設計師大資料
- 好程式設計師大資料教程分享Spark快速入門(72集影片+原始碼+筆記)程式設計師大資料Spark原始碼筆記
- 好程式設計師大資料高階班分享 Spark知識點集合程式設計師大資料Spark
- 好程式設計師大資料培訓分享Spark需要什麼基礎?程式設計師大資料Spark
- 好程式設計師大資料培訓分享常見的Hadoop和Spark專案程式設計師大資料HadoopSpark
- 好程式設計師大資料教程分享Scala系列之閉包程式設計師大資料
- 好程式設計師大資料教程Scala系列之高階函式程式設計師大資料函式
- 好程式設計師大資料教程分享實用的大資料之陣列程式設計師大資料陣列
- 好程式設計師大資料教程分享HDFS常用shell和web介面介紹程式設計師大資料Web
- 大資料面試題整理-好程式設計師大資料面試題程式設計師
- 好程式設計師大資料教程分享HadoopHDFS操作命令總結程式設計師大資料Hadoop
- 好程式設計師大資料教程分享之Hadoop優缺點程式設計師大資料Hadoop
- 好程式設計師不寫程式碼程式設計師
- 好程式設計師大資料分享Shell中陣列講解程式設計師大資料陣列
- 好程式設計師大資料教程Scala系列之方法的巢狀和方法多型程式設計師大資料巢狀多型
- 好程式設計師分享大資料教程之執行緒高階部分程式設計師大資料執行緒
- 好程式設計師大資料基礎教程分享TextFile分割槽問題程式設計師大資料
- 好程式設計師分享大資料三大必備技能程式設計師大資料
- 好程式設計師大資料培訓分享大資料還學嗎?程式設計師大資料
- 好程式設計師大資料培訓分享大資料的應用程式設計師大資料
- 好程式設計師大資料培訓分享MapReduce理解程式設計師大資料
- 好程式設計師web前端教程分享JavaScript簡寫方法程式設計師Web前端JavaScript
- 好程式設計師大資料教程Scala系列之隱式轉換和隱式引數程式設計師大資料
- 好程式設計師大資料教程Hadoop全分佈安裝(非HA)程式設計師大資料Hadoop
- 好程式設計師JavaScript教程分享JavaScript中變數和作用域程式設計師JavaScript變數
- 好程式設計師大資料培訓分享mysql資料型別程式設計師大資料MySql資料型別
- 好程式設計師大資料培訓分享大資料兩大核心技術程式設計師大資料
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典二程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料面試寶典三程式設計師大資料面試