PySpark-MongoDB Connector

NullSpider發表於2017-11-27

問題反饋


在使用中有任何問題,可以反饋給我,以下聯絡方式跟我交流

Author: Leo Wechat: Leo-sunhailin
E-mail: 379978424@qq.com

---
目錄
專案環境 下載方式
小問題 解決辦法和過程
程式碼示例 問題反饋

---

專案環境

  • 環境部署: 請參考右邊 -> 部署步驟
  • 環境詳情:
    • Spark版本: Apache Spark 2.2.0 with Hadoop2.7
    • MongoDB版本: 3.4.9-with openSSL
    • JDK版本: 1.8
    • Python版本: 3.4.4

下載方式

  • 1、官方MongoDB-Spark Connector
    ```Shell

    第一種方式

    spark-shell --packages org.mongodb.spark:mongo-spark-connector_2.11:2.2.0

第二種

pyspark --packages org.mongodb.spark:mongo-spark-connector_2.11:2.2.0

* 2、第三方的Connector
    * 有點坑爹的專案[專案連結](https://github.com/mongodb/mongo-spark?jmp=hero)
    * 專案發起者的官網打不開找不到對應的版本
    * 0.12.x(具體x有哪些不知道...)
    * 命令如下:
```Shell
spark-shell --packages com.stratio.datasource:spark-mongodb_2.11:0.13.0複製程式碼

小問題:

  • 問題:公司的網路有毒,翻不出去外網(應該和公司設定的DNS有關係)

解決辦法和過程:

  • 解決辦法:Teamviewer回家用Spark-shell下了MongoDB官方的解決方案的Jar包.(執行的是命令1)
  • 1、Maven編譯後(下載的時候就會編譯的不需要手動),生成了兩個jar包
    • 路徑預設在: C:/User/<使用者名稱>/.ivy2/
  • 2、下載沒出錯之後在.ivy2檔案下會存在兩個資料夾caches,jars.
  • 3、下載完之後開啟jars資料夾會有兩個jar包:
    • org.mongodb.spark_mongo-spark-connector_2.11-2.2.0.jar
    • org.mongodb_mongo-java-driver-3.4.2.jar
  • 4、把兩個複製到Spark根目錄下的jars資料夾中.

程式碼示例:

    # -*- coding: UTF-8 -*-
"""
Created on 2017年10月24日
@author: Leo
"""

import os
from pyspark.sql import SparkSession

os.environ['SPARK_HOME'] = "你的Spark根目錄"
os.environ['HADOOP_HOME'] = "你的Hadoop根目錄"


class PySparkMongoDB:
    def __init__(self):
        # 這個是uri的配置
        # mongodb://<MongoDB地址:埠>/<資料庫名>.<集合名>
        # 不指定埠就是預設27017
        self.uri_conf = "mongodb://127.0.0.1/<資料庫名>.<集合名>"

        # Connect MongoDB(通過SparkSession維護連線)
        self.my_spark = SparkSession \
            .builder \
            .appName("myApp") \
            .config("spark.mongodb.input.uri", self.uri_conf) \
            .config("spark.mongodb.output.uri", self.uri_conf) \
            .getOrCreate()

    def read_mgo(self):
        df = self.my_spark.read.format("com.mongodb.spark.sql.DefaultSource").load()
        print(df.show())


if __name__ == '__main__':
    mgo = PySparkMongoDB()
    mgo.read_mgo()複製程式碼

相關文章