spark mongo java_Spark Mongodb集成 - Python版
Spark是最近比較火的數據處理平臺,相對于Hadoop的Mapreduce(MR),既具有運行速度的優勢,又打破的Hadoop MR交互性差的局限,同時,其機器學習組件MLlib可以極大的滿足數據處理過程中的算法需求。
Spark采用Scala語言編寫,但同時支持Scala,Python與Java做為開發語言,甚至SparkR項目的出現某種程度上支持了R語言。
MongoDB做為NoSQL比較早的實現,其文檔化的存儲方式,更貼切數據的表達,其自身的BSON數據格式跟JSON非常相像,是做為半結構化數據存儲的選擇之一。
但是現有的Spark與MongoDB的集成,大部分都局限在Java和Scala版本上,Python的實現可以參考的文章實在有限,尤其對Spark中的數據存儲到MongoDB方面,也有不少坑。
1、準備工作
首先,你需要準備好Spark跟MongoDB的環境,版本的話,Spark一定要1.3.0+,這個版本推出了Spark SQL集合起來用,可以達到開發效率跟運行效率的雙向提高,選擇1.3以上版本是因為之前的版本有這個Issue:SPARK-5361存在。MongoDB的話,推薦3.0,參考3.0的release note。
然后,你需要準備好相應的Library:1)mongo-java-driver,選擇3.0.1版本,3.1版本沒有試過,理論上應該也可行;2)mongo-hadoop,不要直接去下載1.3.2版本,該版本有BUG,需要編譯。
2、修改mongo-hadoop庫
1)git clone https://github.com/mongodb/mongo-hadoop
2) 修改MongoRecordWriter.java文件
修改的目的是為了可以直接讓dict型的數據直接存在MongoDB中,而不是以{value:dict}的方式存儲,修改參看下圖,實在忍不住吐槽下簡書默認的編輯器, 引用,代碼都沒有辦法高亮 :(
MongoRecordWriter.java
3)編譯
官方默認的編譯命令是: ./gradlew jar,編譯后的文件會放在core/build/libs目錄下
mongo-hadoop-core-1.3.3-SNAPSHOT.jar
3、運行
前期工作準備好之后,使用pyspark --master local[6] --driver-class-path /mongo-java-driver-3.0.1.jar --jars /mongo-hadoop-core-1.3.3-SNAPSHOT.jar,/mongo-java-driver-3.0.1.jar 運行pyspark。注意,目前測試下來,僅支持local方式運行。
運行命令
4、總結
Scala做為Spark的編寫語言,目前來看,對Spark支持的最好的還是Scala,Python在數據類型的轉化上還是有著不少問題,比如:Calendar類型的支持的Issue現在依然是Open的狀態,參考HADOOP-193,這只是眾多問題的一個,花大量的時間去填坑,而不能專注在數據處理的業務流上,也是不得不面對的問題。
總結
以上是生活随笔為你收集整理的spark mongo java_Spark Mongodb集成 - Python版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌前高管:微软在 AI 搜索方面已经“
- 下一篇: python shutil模块用法实例分