pyspark操作MongoDB的方法步骤


Posted in Python onJanuary 04, 2019

如何导入数据

数据可能有各种格式,虽然常见的是HDFS,但是因为在Python爬虫中数据库用的比较多的是MongoDB,所以这里会重点说说如何用spark导入MongoDB中的数据。

当然,首先你需要在自己电脑上安装spark环境,简单说下,在这里下载spark,同时需要配置好JAVA,Scala环境。

这里建议使用Jupyter notebook,会比较方便,在环境变量中这样设置

PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS=notebook ./bin/pyspark
如果你的环境中有多个Python版本,同样可以制定你想要使用的解释器,我这里是python36,根据需求修改。

PYSPARK_PYTHON=/usr/bin/python36

pyspark对mongo数据库的基本操作 (๑• . •๑)

pyspark操作MongoDB的方法步骤

有几点需要注意的:

  • 不要安装最新的pyspark版本,请安装 pip3 install pyspark==2.3.2
  •  spark-connector 与平常的MongoDB写法不同,格式是: mongodb://127.0.0.1:database.collection
  • 如果计算数据量比较大,你的电脑可能会比较卡,^_^
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: zhangslob
@file: spark_count.py 
@time: 2019/01/03
@desc:
  不要安装最新的pyspark版本
  `pip3 install pyspark==2.3.2`
  更多pyspark操作MongoDB请看https://docs.mongodb.com/spark-connector/master/python-api/
"""

import os
from pyspark.sql import SparkSession

# set PYSPARK_PYTHON to python36
os.environ['PYSPARK_PYTHON'] = '/usr/bin/python36'

# load mongodb data
# 格式是:"mongodb://127.0.0.1:database.collection"
input_uri = "mongodb://127.0.0.1:27017/spark.spark_test"
output_uri = "mongodb://127.0.0.1:27017/spark.spark_test"

# 创建spark,默认使用本地环境,或者"spark://master:7077"
spark = SparkSession \
  .builder \
  .master("local") \
  .appName("MyApp") \
  .config("spark.mongodb.input.uri", input_uri) \
  .config("spark.mongodb.output.uri", output_uri) \
  .config('spark.jars.packages', 'org.mongodb.spark:mongo-spark-connector_2.11:2.2.0') \
  .getOrCreate()


def except_id(collection_1, collection_2, output_collection, pipeline):
  """
  计算表1与表2中不同的数据
  :param collection_1: 导入表1
  :param collection_2: 导入表2
  :param output_collection: 保存的表
  :param pipeline: MongoDB查询语句 str
  :return:
  """
  # 可以在这里指定想要导入的数据库,将会覆盖上面配置中的input_uri。下面保存数据也一样
  # .option("collection", "mongodb://127.0.0.1:27017/spark.spark_test")
  # .option("database", "people").option("collection", "contacts")

  df_1 = spark.read.format('com.mongodb.spark.sql.DefaultSource').option("collection", collection_1) \
    .option("pipeline", pipeline).load()

  df_2 = spark.read.format('com.mongodb.spark.sql.DefaultSource').option("collection", collection_2) \
    .option("pipeline", pipeline).load()

  # df_1有但是不在 df_2,同理可以计算df_2有,df_1没有
  df = df_1.subtract(df_2)
  df.show()

  # mode 参数可选范围
  # * `append`: Append contents of this :class:`DataFrame` to existing data.
  # * `overwrite`: Overwrite existing data.
  # * `error` or `errorifexists`: Throw an exception if data already exists.
  # * `ignore`: Silently ignore this operation if data already exists.

  df.write.format("com.mongodb.spark.sql.DefaultSource").option("collection", output_collection).mode("append").save()
  spark.stop()


if __name__ == '__main__':
  # mongodb query, MongoDB查询语句,可以减少导入数据量
  pipeline = "[{'$project': {'uid': 1, '_id': 0}}]"

  collection_1 = "spark_1"
  collection_2 = "spark_2"
  output_collection = 'diff_uid'
  except_id(collection_1, collection_2, output_collection, pipeline)
  print('success')

完整代码地址: spark_count_diff_uid.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
独特的python循环语句
Nov 20 Python
pandas数据分组和聚合操作方法
Apr 11 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
用Python解决x的n次方问题
Feb 08 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
python实现ip代理池功能示例
Jul 05 Python
django框架模板语言使用方法详解
Jul 18 Python
Python3安装pip工具的详细步骤
Oct 14 Python
matlab灰度图像调整及imadjust函数的用法详解
Feb 27 Python
Python Matplotlib简易教程(小白教程)
Jul 28 Python
python tkinter模块的简单使用
Apr 07 Python
python源码剖析之PyObject详解
May 18 Python
详解Appium+Python之生成html测试报告
Jan 04 #Python
python虚拟环境迁移方法
Jan 03 #Python
对django xadmin自定义菜单的实例详解
Jan 03 #Python
在Python中关于使用os模块遍历目录的实现方法
Jan 03 #Python
Python代码打开本地.mp4格式文件的方法
Jan 03 #Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 #Python
python scp 批量同步文件的实现方法
Jan 03 #Python
You might like
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
多个checkbox被选中时如何判断是否有自己想要的
2014/09/22 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
Element-UI Table组件上添加列拖拽效果实现方法
2018/04/14 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
vue实现图片上传到后台
2020/06/29 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
深入理解Python 代码优化详解
2014/10/27 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Python实现滑动平均(Moving Average)的例子
2019/08/24 Python
详解Python time库的使用
2019/10/10 Python
python基于event实现线程间通信控制
2020/01/13 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
个人简历中自我评价
2014/02/11 职场文书
税务会计岗位职责
2014/02/18 职场文书
迎国庆演讲稿
2014/09/05 职场文书
2014年教师节演讲稿范文
2014/09/10 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
教师辞职书范文
2015/02/26 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python
关于vue-router-link选择样式设置
2022/04/30 Vue.js
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python