當前位置:首頁 » 編程軟體 » sparkscala腳本

sparkscala腳本

發布時間: 2022-06-01 16:53:16

① Spark 中用 Scala 和 java 開發有什麼區別

1,構建系統的選擇,sbt更合適用來構建Scala工程,maven更合適用來構建Java工程
2,對於spark中的API來說,Java和Scala有差別,但差別並不大
3,如果用Scala開發spark原型程序,可以用spark-shell「打草稿」,或者直接使用spark-shell做互動式實時查詢
4,用Scala代碼量將減少甚至一個數量級,不過Scala的使用門檻較高
建議:使用Scala構建spark作業,因為spark本身為sbt所構建,同時使用Scala開發spark作業將有助於理解spark的實現機制
Scala相對Java語法更豐富,更簡潔,寫起來更像腳本,能夠提高開發效率。
使用Java的話代碼會規范些,不過太臃腫,代碼量更大。
另外Spark基本使用函數式編程,使用Java的話可能需要寫一大堆匿名類,而Scala只需要一個lambda表達式。
Java不支持自動類型推導,RDD類基本都是范型,聲明時需要寫一串類類型,而Scala基本可以省略變數類型。
另外,如果喜歡,可以混合Java和Scala,因為二者最終都是編譯成class文件,使用Scala能夠隨意調用Java實現的類和方法。
從表面上看,無論採用哪種語言,都能完成一樣的功能,只是代碼量有多有少,開發人員根據自己的情況選擇使用Java還是Scala都可。
據說目前最新的Java 8已經支持函數式介面了,Java 9也將推出Java Shell功能,慢慢地會變得和Scala一樣簡潔。

② 為什麼Spark要用Scala實現

1,構建系統的選擇,sbt更合適用來構建Scala工程,maven更合適用來構建Java工程
2,對於spark中的API來說,Java和Scala有差別,但差別並不大
3,如果用Scala開發spark原型程序,可以用spark-shell「打草稿」,或者直接使用spark-shell做互動式實時查詢
4,用Scala代碼量將減少甚至一個數量級,不過Scala的使用門檻較高
建議:使用Scala構建spark作業,因為spark本身為sbt所構建,同時使用Scala開發spark作業將有助於理解spark的實現機制

作者:egraldlo
鏈接:

③ spark部署python腳本怎麼部署三方庫

1、Spark腳本提交/運行/部署
1.1 spark-shell(交互窗口模式)
運行Spark-shell需要指向申請資源的standalone spark集群信息,其參數為MASTER,還可以指定executor及driver的內存大小。
sudo spark-shell --executor-memory 5g --driver-memory1g --master spark://192.168.180.216:7077
spark-shell啟動完後,可以在交互窗口中輸入Scala命令,進行操作,其中spark-shell已經默認生成sc對象,可以用:
val user_rdd1 = sc.textFile(inputpath, 10)
讀取數據資源等。
1.2 spark-shell(腳本運行模式)
上面方法需要在交互窗口中一條一條的輸入scala程序;將scala程序保存在test.scala文件中,可以通過以下命令一次運行該文件中的程序代碼:
sudo spark-shell --executor-memory 5g --driver-memory1g --master spark//192.168.180.216:7077 < test.scala
運行後會自動進入spark-shell交互窗口並且運行test.scala中的程序,運行完成後,會自動退出spark-shell。
如果程序退出終端後,Linux終端失效,可以試試:stty echo 命令
1.3 spark-submit (程序部署)
Spark提供了一個容易上手的應用程序部署工具bin/spark-submit,可以完成Spark應用程序在local、Standalone、YARN、Mesos上的快捷部署。可以指定集群資源master,executor/ driver的內存資源等。
sudo spark-submit --masterspark://192.168.180.216:7077 --executor-memory 5g --class mypackage.test workcount.jar hdfs://192.168.180.79:9000/user/input.txt
workcount .scala 代碼打包workcount.jar,並將文件需要上傳到spark的安裝目錄下面;
hdfs//192.168.180.79:9000/user/input.txt為輸入參數;

④ 如何運行含spark的python腳本

1、Spark腳本提交/運行/部署1.1spark-shell(交互窗口模式)運行Spark-shell需要指向申請資源的standalonespark集群信息,其參數為MASTER,還可以指定executor及driver的內存大小。sudospark-shell--executor-memory5g--driver-memory1g--masterspark://192.168.180.216:7077spark-shell啟動完後,可以在交互窗口中輸入Scala命令,進行操作,其中spark-shell已經默認生成sc對象,可以用:valuser_rdd1=sc.textFile(inputpath,10)讀取數據資源等。1.2spark-shell(腳本運行模式)上面方法需要在交互窗口中一條一條的輸入scala程序;將scala程序保存在test.scala文件中,可以通過以下命令一次運行該文件中的程序代碼:sudospark-shell--executor-memory5g--driver-memory1g--masterspark//192.168.180.216:7077

⑤ 如何使用scala+spark讀寫hbase

公司有一些實時數據處理的項目,存儲用的是hbase,提供實時的檢索,當然hbase裡面存儲的數據模型都是簡單的,復雜的多維檢索的結果是在es裡面存儲的,公司也正在引入Kylin作為OLAP的數據分析引擎,這塊後續有空在研究下。
接著上面說的,hbase存儲著一些實時的數據,前兩周新需求需要對hbase裡面指定表的數據做一次全量的update以滿足業務的發展,平時操作hbase都是單條的curd,或者插入一個批量的list,用的都是hbase的java api比較簡單,但這次涉及全量update,所以如果再用原來那種單線程的操作api,勢必速度回慢上許多。
關於批量操作Hbase,一般我們都會用MapRece來操作,這樣可以大大加快處理效率,原來也寫過MR操作Hbase,過程比較繁瑣,最近一直在用scala做spark的相關開發,所以就直接使用scala+spark來搞定這件事了,當然底層用的還是Hbase的TableOutputFormat和TableOutputFormat這個和MR是一樣的,在spark裡面把從hbase裡面讀取的數據集轉成rdd了,然後做一些簡單的過濾,轉化,最終在把結果寫入到hbase裡面。
整個流程如下:
(1)全量讀取hbase表的數據
(2)做一系列的ETL
(3)把全量數據再寫回hbase
核心代碼如下:
//獲取conf
val conf=HBaseConfiguration.create() //設置讀取的表
conf.set(TableInputFormat.INPUT_TABLE,tableName) //設置寫入的表
conf.set(TableOutputFormat.OUTPUT_TABLE,tableName)//創建sparkConf
val sparkConf=new SparkConf() //設置spark的任務名
sparkConf.setAppName("read and write for hbase ") //創建spark上下文
val sc=new SparkContext(sparkConf)
//為job指定輸出格式和輸出表名

val newAPIJobConfiguration1 = Job.getInstance(conf)
newAPIJobConfiguration1.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, tableName)
newAPIJobConfiguration1.setOutputFormatClass(classOf[TableOutputFormat[ImmutableBytesWritable]])

//全量讀取hbase表
val rdd=sc.newAPIHadoopRDD(conf,classOf[TableInputFormat]
,classOf[ImmutableBytesWritable]
,classOf[Result]
)
//過濾空數據,然後對每一個記錄做更新,並轉換成寫入的格式
val final_rdd= rdd.filter(checkNotEmptyKs).map(forDatas)
//轉換後的結果,再次做過濾
val save_rdd=final_rdd.filter(checkNull)
//最終在寫回hbase表
save_rdd.saveAsNewAPIHadoopDataset(newAPIJobConfiguration1.getConfiguration)
sc.stop()

從上面的代碼可以看出來,使用spark+scala操作hbase是非常簡單的。下面我們看一下,中間用到的幾個自定義函數:
第一個:checkNotEmptyKs
作用:過濾掉空列簇的數據
def checkNotEmptyKs(f:((ImmutableBytesWritable,Result))):Boolean={ val r=f._2 val rowkey=Bytes.toString(r.getRow) val map:scala.collection.mutable.Map[Array[Byte],Array[Byte]]= r.getFamilyMap(Bytes.toBytes("ks")).asScala if(map.isEmpty) false else true
}

第二個:forDatas
作用:讀取每一條數據,做update後,在轉化成寫入操作
def forDatas(f: (ImmutableBytesWritable,Result)): (ImmutableBytesWritable,Put)={ val r=f._2 //獲取Result
val put:Put=new Put(r.getRow) //聲明put
val ks=Bytes.toBytes("ks") //讀取指定列簇
val map:scala.collection.mutable.Map[Array[Byte],Array[Byte]]= r.getFamilyMap(ks).asScala
map.foreach(kv=>{//遍歷每一個rowkey下面的指定列簇的每一列的數據做轉化
val kid= Bytes.toString(kv._1)//知識點id
var value=Bytes.toString(kv._2)//知識點的value值
value="修改後的value"
put.addColumn(ks,kv._1,Bytes.toBytes(value)) //放入put對象
}
) if(put.isEmpty) null else (new ImmutableBytesWritable(),put)

}

第三個:checkNull 作用:過濾最終結果裡面的null數據
def checkNull(f:((ImmutableBytesWritable,Put))):Boolean={ if(f==null) false else true
}

上面就是整個處理的邏輯了,需要注意的是對hbase裡面的無效數據作過濾,跳過無效數據即可,邏輯是比較簡單的,代碼量也比較少。

⑥ scala代碼能夠在spark-shell運行,但是不能通過spark-submit提交運行,why

靠 總算搞定了,跟題主一模一樣的異常信息

首先肯定是版本問題,編譯版本問題。如樓上所說sbt配置spark-core的版本應該有問題。
貼我的配置
<img src="https://pic4.mg.com/_b.png" data-rawwidth="745" data-rawheight="647" class="origin_image zh-lightbox-thumb" width="745" data-original="https://pic4.mg.com/_r.png">注意各個依賴配置區別,%%和%的區別,%%會帶scala版本信息,spark-core也就會變成spark-core_2.10,因為這里scala_version是2.10.4(.4就不要了),然後構建打包執行成功,一定要重新project structure。注意各個依賴配置區別,%%和%的區別,%%會帶scala版本信息,spark-core也就會變成spark-core_2.10,因為這里scala_version是2.10.4(.4就不要了),然後構建打包執行成功,一定要重新project structure。

之前是scala_version是2.11.7,而且沒有帶scala版本信息去編譯。由於用的CDH,CDH中的依賴也沒有spark-core_2.11,只有spark-core_2.10。

⑦ 如何使用Spark/Scala讀取Hbase的數據

使用Spark/Scala讀取Hbase的數據 必須使用高亮參數啟動Spark-shell,否則當你遍歷RDD時會出現如下的Exception java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable spark-shell--conf spark.serializer=org.apache.spark.serializer.KryoSerializer 以下代碼,經過MaprDB實測通過 import org.apache.spark._ import org.apache.spark.rdd.NewHadoopRDD import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor} import org.apache.hadoop.hbase.client.HBaseAdmin import org.apache.hadoop.hbase.maprece.TableInputFormat import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HColumnDescriptor import org.apache.hadoop.hbase.util.Bytes import org如何使用Spark/Scala讀取Hbase的數據

⑧ 怎樣在spark單機上編寫運行scala程序

使用Scala寫一個測試代碼:

object Test {
def main(args: Array[String]): Unit = {
println("hello world")
}
}

就把這個Test視為類,項目組織結構如:

⑨ spark怎麼運行scala代碼

# Use spark-submit to run your application
$ YOUR_SPARK_HOME/bin/spark-submit \
--class "SimpleApp" \
--master local[4] \
target/scala-2.10/simple-project_2.10-1.0.jar
...

⑩ 如何將spark scala腳本運行的數據結果導出

可以前提是其他設置沒有改變

熱點內容
四川伺服器託管雲空間雲主機 發布:2024-05-02 11:04:28 瀏覽:962
手機app重編譯 發布:2024-05-02 11:01:40 瀏覽:537
怎麼給訂制系統平板安裝安卓系統 發布:2024-05-02 10:29:59 瀏覽:260
雲伺服器做網站伺服器用什麼系統 發布:2024-05-02 10:20:26 瀏覽:896
python經典程序實例 發布:2024-05-02 09:42:07 瀏覽:260
酷豐c10出廠密碼多少 發布:2024-05-02 09:23:33 瀏覽:376
開發安卓游戲需要會什麼 發布:2024-05-02 09:04:22 瀏覽:977
無線網密碼忘了手機怎麼改 發布:2024-05-02 08:57:24 瀏覽:527
iis上傳文件許可權設置 發布:2024-05-02 08:56:39 瀏覽:232
ipad文件加密 發布:2024-05-02 08:20:30 瀏覽:443