MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Bắt Spark, Python và MongoDB làm việc cùng nhau

Cập nhật :

2016-07-04

Kể từ bản cập nhật cuối cùng MongoDB Spark Connector đã trưởng thành khá nhiều. Nó cung cấp các tệp nhị phân cập nhật và API dựa trên nguồn dữ liệu nhưng nó đang sử dụng SparkConf nên về mặt chủ quan, nó kém linh hoạt hơn Stratio / Spark-MongoDB.

2016-03-30

Kể từ câu trả lời ban đầu, tôi đã tìm thấy hai cách khác nhau để kết nối với MongoDB từ Spark:

  • mongodb / mongo-spark
  • Stratio / Spark-MongoDB

Trong khi cái đầu tiên có vẻ tương đối chưa trưởng thành, cái sau có vẻ là lựa chọn tốt hơn nhiều so với trình kết nối Mongo-Hadoop và cung cấp API Spark SQL.

# Adjust Scala and package version according to your setup
# although officially 0.11 supports only Spark 1.5
# I haven't encountered any issues on 1.6.1
bin/pyspark --packages com.stratio.datasource:spark-mongodb_2.11:0.11.0
df = (sqlContext.read
  .format("com.stratio.datasource.mongodb")
  .options(host="mongo:27017", database="foo", collection="bar")
  .load())

df.show()

## +---+----+--------------------+
## |  x|   y|                 _id|
## +---+----+--------------------+
## |1.0|-1.0|56fbe6f6e4120712c...|
## |0.0| 4.0|56fbe701e4120712c...|
## +---+----+--------------------+

Nó có vẻ ổn định hơn nhiều so với mongo-hadoop-spark , hỗ trợ đẩy xuống vị từ mà không cần cấu hình tĩnh và hoạt động đơn giản.

Câu trả lời ban đầu :

Thật vậy, có khá nhiều bộ phận chuyển động ở đây. Tôi đã cố gắng làm cho nó dễ quản lý hơn một chút bằng cách xây dựng một hình ảnh Docker đơn giản gần như khớp với cấu hình được mô tả (mặc dù vậy, tôi đã bỏ qua các thư viện Hadoop cho ngắn gọn). Bạn có thể tìm thấy nguồn hoàn chỉnh trên GitHub (DOI 10.5281 / zenodo.47882) và xây dựng nó từ đầu:

git clone https://github.com/zero323/docker-mongo-spark.git
cd docker-mongo-spark
docker build -t zero323/mongo-spark .

hoặc tải xuống hình ảnh mà tôi đã đẩy vào Docker Hub để bạn có thể chỉ cần docker pull zero323/mongo-spark ):

Hình ảnh bắt đầu:

docker run -d --name mongo mongo:2.6
docker run -i -t --link mongo:mongo zero323/mongo-spark /bin/bash

Khởi động trình bao PySpark chuyển --jars--driver-class-path :

pyspark --jars ${JARS} --driver-class-path ${SPARK_DRIVER_EXTRA_CLASSPATH}

Và cuối cùng hãy xem nó hoạt động như thế nào:

import pymongo
import pymongo_spark

mongo_url = 'mongodb://mongo:27017/'

client = pymongo.MongoClient(mongo_url)
client.foo.bar.insert_many([
    {"x": 1.0, "y": -1.0}, {"x": 0.0, "y": 4.0}])
client.close()

pymongo_spark.activate()
rdd = (sc.mongoRDD('{0}foo.bar'.format(mongo_url))
    .map(lambda doc: (doc.get('x'), doc.get('y'))))
rdd.collect()

## [(1.0, -1.0), (0.0, 4.0)]

Xin lưu ý rằng mongo-hadoop dường như đóng kết nối sau hành động đầu tiên. Vì vậy, gọi ví dụ rdd.count() sau khi thu thập sẽ đưa ra một ngoại lệ.

Dựa trên các vấn đề khác nhau mà tôi gặp phải khi tạo hình ảnh này, tôi có xu hướng tin rằng vượt qua mongo-hadoop-1.5.0-SNAPSHOT.jarmongo-hadoop-spark-1.5.0-SNAPSHOT.jar cho cả hai --jars--driver-class-path là yêu cầu khó duy nhất .

Ghi chú :

  • Hình ảnh này dựa trên jaceklaskowski / docker-spark một cách lỏng lẻo, vì vậy hãy nhớ gửi một số nghiệp lành đến @ jacek-laskowski nếu điều đó có ích.
  • Nếu không yêu cầu phiên bản phát triển bao gồm API mới thì hãy sử dụng --packages rất có thể là một lựa chọn tốt hơn.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb phân trang dựa trên phạm vi

  2. Xóa tệp nhật ký của mongodb có an toàn không?

  3. Ngủ đông với MongoDB

  4. Làm cách nào để kiểm tra xem trường có tồn tại hay không trong MongoDB?

  5. MongoDB:Làm thế nào để phân tích cú pháp ngày trong phiên bản 3.6 mongoDb?