国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

pyspark操作MongoDB的方法步驟

2020-02-16 00:29:30
字體:
供稿:網(wǎng)友

如何導(dǎo)入數(shù)據(jù)

數(shù)據(jù)可能有各種格式,雖然常見的是HDFS,但是因?yàn)樵赑ython爬蟲中數(shù)據(jù)庫用的比較多的是MongoDB,所以這里會(huì)重點(diǎn)說說如何用spark導(dǎo)入MongoDB中的數(shù)據(jù)。

當(dāng)然,首先你需要在自己電腦上安裝spark環(huán)境,簡單說下,在這里下載spark,同時(shí)需要配置好JAVA,Scala環(huán)境。

這里建議使用Jupyter notebook,會(huì)比較方便,在環(huán)境變量中這樣設(shè)置

PYSPARK_DRIVER_PYTHON=jupyter PYSPARK_DRIVER_PYTHON_OPTS=notebook ./bin/pyspark
如果你的環(huán)境中有多個(gè)Python版本,同樣可以制定你想要使用的解釋器,我這里是python36,根據(jù)需求修改。

PYSPARK_PYTHON=/usr/bin/python36

pyspark對(duì)mongo數(shù)據(jù)庫的基本操作 (๑• . •๑)

有幾點(diǎn)需要注意的:

不要安裝最新的pyspark版本,請(qǐng)安裝 pip3 install pyspark==2.3.2  spark-connector 與平常的MongoDB寫法不同,格式是: mongodb://127.0.0.1:database.collection 如果計(jì)算數(shù)據(jù)量比較大,你的電腦可能會(huì)比較卡,^_^
#!/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請(qǐng)看https://docs.mongodb.com/spark-connector/master/python-api/"""import osfrom pyspark.sql import SparkSession# set PYSPARK_PYTHON to python36os.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"# 創(chuàng)建spark,默認(rèn)使用本地環(huán)境,或者"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):  """  計(jì)算表1與表2中不同的數(shù)據(jù)  :param collection_1: 導(dǎo)入表1  :param collection_2: 導(dǎo)入表2  :param output_collection: 保存的表  :param pipeline: MongoDB查詢語句 str  :return:  """  # 可以在這里指定想要導(dǎo)入的數(shù)據(jù)庫,將會(huì)覆蓋上面配置中的input_uri。下面保存數(shù)據(jù)也一樣  # .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,同理可以計(jì)算df_2有,df_1沒有  df = df_1.subtract(df_2)  df.show()  # mode 參數(shù)可選范圍  # * `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查詢語句,可以減少導(dǎo)入數(shù)據(jù)量  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')            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湖北省| 万盛区| 金山区| 永春县| 沙雅县| 临城县| 绵阳市| 邵武市| 静海县| 怀仁县| 集贤县| 呼玛县| 横山县| 沧源| 辉县市| 绥化市| 古浪县| 延寿县| 通化县| 苍梧县| 依兰县| 农安县| 临沭县| 绥阳县| 巍山| 新巴尔虎右旗| 贞丰县| 南皮县| 晋城| 鄂尔多斯市| 威海市| 桐柏县| 鄂伦春自治旗| 望都县| 崇义县| 日土县| 新宾| 尼勒克县| 海伦市| 满洲里市| 鹤庆县|