MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Membuat Spark, Python, dan MongoDB bekerja bersama

Pembaruan :

04-07-2016

Sejak pembaruan terakhir, MongoDB Spark Connector cukup matang. Ini menyediakan binari terbaru dan API berbasis sumber data tetapi menggunakan SparkConf konfigurasi sehingga secara subyektif kurang fleksibel daripada Stratio/Spark-MongoDB.

30-03-2016

Sejak jawaban asli saya menemukan dua cara berbeda untuk terhubung ke MongoDB dari Spark:

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

Sementara yang pertama tampaknya relatif belum matang, yang terakhir tampak seperti pilihan yang jauh lebih baik daripada konektor Mongo-Hadoop dan menyediakan 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...|
## +---+----+--------------------+

Tampaknya jauh lebih stabil daripada mongo-hadoop-spark , mendukung pushdown predikat tanpa konfigurasi statis dan hanya berfungsi.

Jawaban asli :

Memang, ada beberapa bagian yang bergerak di sini. Saya mencoba membuatnya sedikit lebih mudah dikelola dengan membangun gambar Docker sederhana yang kira-kira cocok dengan konfigurasi yang dijelaskan (saya telah menghilangkan perpustakaan Hadoop untuk singkatnya). Anda dapat menemukan sumber lengkapnya di GitHub (DOI 10.5281/zenodo.47882) dan buat dari awal:

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

atau unduh gambar yang telah saya masukkan ke Docker Hub sehingga Anda cukup docker pull zero323/mongo-spark ):

Mulai gambar:

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

Mulai shell PySpark dengan melewati --jars dan --driver-class-path :

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

Dan akhirnya lihat cara kerjanya:

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)]

Harap dicatat bahwa mongo-hadoop tampaknya menutup koneksi setelah tindakan pertama. Jadi memanggil misalnya rdd.count() setelah mengumpulkan akan mengeluarkan pengecualian.

Berdasarkan berbagai masalah yang saya temui saat membuat gambar ini, saya cenderung percaya bahwa lulus mongo-hadoop-1.5.0-SNAPSHOT.jar dan mongo-hadoop-spark-1.5.0-SNAPSHOT.jar ke keduanya --jars dan --driver-class-path adalah satu-satunya persyaratan yang sulit .

Catatan :

  • Gambar ini secara longgar didasarkan pada jaceklaskowski/docker-spark jadi pastikan untuk mengirimkan karma baik ke @jacek-laskowski jika itu membantu.
  • Jika tidak memerlukan versi pengembangan termasuk API baru, gunakan --packages kemungkinan besar merupakan pilihan yang lebih baik.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DBaaS Hosting MongoDB Pertama yang Mendukung Pemerintah Azure untuk Sektor Publik

  2. Bagaimana mengelola pengguna dan otentikasi di MongoDB

  3. Bagaimana Menguji Peningkatan Aplikasi MongoDB Anda?

  4. Kelompokkan berdasarkan nilai dan kondisi

  5. Pengecualian mengautentikasi MongoCredential dan Pengecualian Mongo Db Uncategorized