您好,登錄后才能下訂單哦!
這篇文章主要介紹“spark怎么安裝”,在日常操作中,相信很多人在spark怎么安裝問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spark怎么安裝”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
問題:從一個總計100行的文件中找出所有包含“包租婆”的行數 算法如下:
1. 讀一行,判斷這一行有“包租婆”嗎?如果有,全局變量count加1。 2. 文件到末尾了嗎?如果沒有,跳轉到第1步繼續執行。 3. 打印count。
RDD的概念:全稱為Resilient Distributed Datasets,是一個容錯的、并行的數據結構,可以讓用戶顯式地將數據存儲到磁盤和內存中,并能控制數據的分區。
上述例子中,總計100行的文件就是一個RDD,其中每一行表示一個RDD的元素
1. 對集合的每個記錄執行相同的操作 - 每一行都做“字符串”檢查 - 檢查本行是不是到了最后一行 2. 這個操作的具體行為是用戶指定的 - 包含“包租婆”就為計數器做+1操作 - 最后一行:結束;不是最后一行:進入下一行檢查
1. 創建RDD - 從文件中創建 val b = sc.textFile("README.md") README.md每一行都是RDD的一個元素 - 從普通數組創建RDD scala> val a = sc.parallelize(1 to 9, 3) 里面包含了1到9這9個數字,它們分別在3個分區 2. map map是對RDD中的每個元素都執行一個指定的函數來產生一個新的RDD。任何原RDD中的元素在新RDD中都有且只有一個元素與之對應。 - RDD a 中每個元素都比原來大一倍 scala> val b = a.map(x => x*2) scala> b.collect res11: Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16, 18) 3. mapPartitions mapPartitions是map的一個變種。map的輸入函數是應用于RDD中每個元素,而mapPartitions的輸入函數是應用于每個分區,也就是把每個分區中的內容作為整體來處理的 - 函數myfunc是把分區中一個元素和它的下一個元素組成一個Tuple scala> def myfunc[T](iter: Iterator[T]) : Iterator[(T, T)] = { var res = List[(T, T)]() var pre = iter.next while (iter.hasNext) { val cur = iter.next; res .::= (pre, cur) pre = cur; } res.iterator } scala> a.mapPartitions(myfunc).collect res0: Array[(Int, Int)] = Array((2,3), (1,2), (5,6), (4,5), (8,9), (7,8)) 4. mapValues mapValues顧名思義就是輸入函數應用于RDD中Kev-Value的Value,原RDD中的Key保持不變,與新的Value一起組成新的RDD中的元素。因此,該函數只適用于元素為KV對的RDD。 _def mapPartitions[U: ClassTag](f: Iterator[T] => Iterator[U], preservesPartitioning: Boolean = false): RDD[U] f即為輸入函數,它處理每個分區里面的內容。每個分區中的內容將以Iterator[T]傳遞給輸入函數f,f的輸出結果是Iterator[U]。最終的RDD由所有分區經過輸入函數處理后的結果合并起來的。_ - RDD b 的key是字符串長度,value是當前元素值;對b進行mapValues操作,使得value首尾字符設為x scala> val a = sc.parallelize(List("dog", "tiger", "lion", "cat", "panther", " eagle"), 2) scala> val b = a.map(x => (x.length, x)) scala> b.mapValues("x" + _ + "x").collect res5: Array[(Int, String)] = Array((3,xdogx), (5,xtigerx), (4,xlionx),(3,xcatx), (7,xpantherx), (5,xeaglex)) 5. mapWith mapWith是map的另外一個變種,map只需要一個輸入函數,而mapWith有兩個輸入函數。
- 資料 [安裝過程](https://spark.apache.org/downloads.html) - 安裝
wget http://apache.spinellicreations.com/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgz tar zxf spark-1.6.1-bin-hadoop2.6.tgz mv spark-1.6.1-bin-hadoop2.6 spark mv -f spark ~/app/ vi ~/.bash_profile PATH=$PATH:$HOME/bin:/home/solr/app/spark/bin source ~/.bash_profile
- 啟動spark
spark-shell 進入scala>命令行
- hello world
scala> println("hello world") hello world
下載并安裝JDK
下載并安裝IDEA
下載并安裝SCALA
準備好spark的lib包
添加IDEA 的SCALA插件 File->Settings->Plugins->搜索Scala,并安裝Scala插件
新建項目 File->New Project->選擇Scala->next->project name & location -> Finish
添加spark的lib包 “File”–> “project structure” –> “Libraries”,選擇“+”,將spark-hadoop 對應的包導入
新建SparkPi類(源碼見$SPARKHOME$/examples/src/main/scala/org/apache/spark/examples) 新建包:org.apache.spark.examples 新建Scala類:SparkPi
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // scalastyle:off println package org.apache.spark.examples import scala.math.random import org.apache.spark._ /** Computes an approximation to pi */ object SparkPi { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Spark Pi") //本地運行加.setMaster("local") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow val count = spark.parallelize(1 until n, slices).map { i => val x = random * 2 - 1 val y = random * 2 - 1 if (x*x + y*y < 1) 1 else 0 }.reduce(_ + _) println("Pi is roughly " + 4.0 * count / n) spark.stop() } } // scalastyle:on println [打包](http://blog.sina.com.cn/s/blog_3fe961ae0102uy42.html) 打出的jar在code\spark\test\out\artifacts\sparkPi\sparkPi.jar 上傳至linux服務器,執行命令 $SPARK_HOME$/bin/spark-submit --class "org.apache.spark.examples.SparkPi" --master spark://updev4:7077 /home/solr/sparkPi.jar 輸出結果: Pi is roughly 3.13662
到此,關于“spark怎么安裝”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。