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 查找文件夹下所有文件 实现代码
Jul 01 Python
python中sys.argv参数用法实例分析
May 20 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
Python函数参数操作详解
Aug 03 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
python实现中文文本分句的例子
Jul 15 Python
Python二元赋值实用技巧解析
Oct 25 Python
Django中FilePathField字段的用法
May 21 Python
Python如何输出百分比
Jul 31 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 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
PHP函数utf8转gb2312编码
2006/12/21 PHP
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
php缓存技术详细总结
2013/08/07 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
php中__toString()方法用法示例
2016/12/07 PHP
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
python 实现归并排序算法
2012/06/05 Python
tornado捕获和处理404错误的方法
2014/02/26 Python
python实现封装得到virustotal扫描结果
2014/10/05 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
python+opencv识别图片中的圆形
2020/03/25 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
Python 中如何写注释
2020/08/28 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
python中entry用法讲解
2020/12/04 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
教师绩效考核方案
2014/01/21 职场文书