最新想对mongo中一个上亿的大collection进行操作,做一些数据分析,发现使用find()对表进行轮询是真的慢啊,想起使用spark进行数据处理,这里记录一下pyspark对mongo的操作,走了一些小坑。
内容比较简单,直接上代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
@Time : 2021/6/16 9:20
@Author : MaCan
@Mail : ma_cancan@163.com
@File : mongo_data_process.py
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os
import re
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
if __name__ == '__main__':
conf = SparkConf().setAppName('text_trans').setMaster("local[*]")
my_spark = SparkSession.builder\
.config(conf=conf) \
.config("spark.mongodb.input.uri", "mongodb://HOST:PORT/DB.COLLECTION") \
.config("spark.mongodb.output.uri", "mongodb://HOST:PORT/DB.COLLECTION") \
.config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.11:2.3.5") \
.getOrCreate()
data = my_spark.read\
.format('mongo')\
.load()\
.select('url', 'keywords_url')\
.rdd\
## 写自己的业务逻辑业务逻辑
有几点需要注意一下:
- config 中spark.mongodb.input.uri 对应的value值按照自己mongo服务的实际情况写。
- 我使用的是pyspakr==2.3.2
- mongo的jar驱动版本号需要对应,不然会报错。