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}的方式存储,修改参看下图,实在忍不住吐槽下简书默认的编辑器, 引用,代码都没有办法高亮 :(

5cbfbbd3e037

MongoRecordWriter.java

3)编译

官方默认的编译命令是: ./gradlew jar,编译后的文件会放在core/build/libs目录下

5cbfbbd3e037

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方式运行。

5cbfbbd3e037

运行命令

4、总结

Scala做为Spark的编写语言,目前来看,对Spark支持的最好的还是Scala,Python在数据类型的转化上还是有着不少问题,比如:Calendar类型的支持的Issue现在依然是Open的状态,参考HADOOP-193,这只是众多问题的一个,花大量的时间去填坑,而不能专注在数据处理的业务流上,也是不得不面对的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值