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简单实现基数排序算法
May 16 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
python实现Decorator模式实例代码
Feb 09 Python
对Python之gzip文件读写的方法详解
Feb 08 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
详解如何减少python内存的消耗
Aug 09 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
python 异步async库的使用说明
May 04 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
利用Python将多张图片合成视频的实现
Nov 23 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读注册表
2006/10/09 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python算法之栈(stack)的实现
2014/08/18 Python
Python中endswith()函数的基本使用
2015/04/07 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
使用python实现多维数据降维操作
2020/02/24 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
如何编写python的daemon程序
2021/01/07 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
内衣营销方案
2014/03/15 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
反四风对照检查材料
2014/09/22 职场文书
学校中秋节活动总结
2015/03/23 职场文书
MongoDB数据库之添删改查
2022/04/26 MongoDB