Как рассказать PySpark, где находится пакет pymongo-spark? [Дубликат]

, если вы используете dom4j, это будет dom4JDOM.asString ()

29
задан zero323 17 November 2015 в 18:58
поделиться

4 ответа

Обновления:

2016-07-04

Поскольку последнее обновление MongoDB Spark Connector созрело довольно много. Он предоставляет обновленные бинарные файлы и API на основе источника данных, но использует конфигурацию SparkConf, поэтому он субъективно менее гибкий, чем Stratio / Spark-MongoDB.

2016-03-30

После первоначального ответа я нашел два разных способа подключения к MongoDB от Spark:

В то время как первый кажется относительно незрелым, последний выглядит гораздо лучше, чем разъем Mongo-Hadoop, и предоставляет 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...|
## +---+----+--------------------+

Кажется, он намного более стабилен, чем mongo-hadoop-spark, поддерживает предикат pushdown без статической конфигурации и просто

Оригинальный ответ:

Действительно, здесь есть немало движущихся частей. Я попытался сделать это немного более управляемым, построив простое изображение Docker, которое примерно соответствует описанной конфигурации (хотя для краткости я опутал библиотеки Hadoop). Вы можете найти полный источник на GitHub ( DOI 10.5281 / zenodo.47882 ) и построить его с нуля:

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

или загрузить image Я нажал на Docker Hub , чтобы вы могли просто docker pull zero323/mongo-spark):

Запустить изображения:

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

Запустить прохождение оболочки PySpark --jars и --driver-class-path:

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

И, наконец, посмотрите, как это работает:

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

Обратите внимание, что mongo-hadoop, похоже, закрывает соединение после первого действия. Итак, вызов, например, rdd.count() после того, как сбор будет вызывать исключение.

Исходя из различных проблем, с которыми я столкнулся при создании этого изображения, я склонен полагать, что передача mongo-hadoop-1.5.0-SNAPSHOT.jar и mongo-hadoop-spark-1.5.0-SNAPSHOT.jar в оба --jars и --driver-class-path является единственным жестким требованием.

Примечания:

  • Это изображение свободно основано на jaceklaskowski / docker-spark , поэтому, пожалуйста, не забудьте отправить какую-то хорошую карму в @ jacek-laskowski , если это поможет.
  • Если вам не нужна версия для разработки, включая новый API , то использование --packages, скорее всего, лучший вариант.
12
ответ дан Community 19 August 2018 в 08:21
поделиться
  • 1
    Спасибо за тщательный, отличный пример. Это сработало – Philip O'Brien 20 November 2015 в 10:26
  • 2
    Быстрый вопрос (если я должен перевести это на новый вопрос, просто скажите). Как я могу аутентифицироваться на mongo с помощью pymongo_spark, я пробовал стандартный подход uri для подключения к монго mongo_rdd = sc.mongoRDD('mongodb://username:password@localhost:27017/db.collection'), но он не работает – Philip O'Brien 20 November 2015 в 11:05
  • 3
    Честно говоря, я не знаю. Передача в uri должна работать . Вы можете попробовать передать их в словаре конфигурации sc.mongoRDD(uri, some_config), но это всего лишь предположение. – zero323 20 November 2015 в 11:16
  • 4
    Оказывается , это моя проблема . Теперь я работаю над исправлением. еще раз спасибо – Philip O'Brien 20 November 2015 в 11:21
  • 5
    Было бы полезно, если бы вы добавили пример записи, в дополнение к прочитанному, который вы указали. – rjurney 25 March 2016 в 22:54

Можете ли вы попробовать использовать опцию --package вместо --jars ... в вашей команде spark-submit:

spark-submit --packages org.mongodb.mongo-hadoop:mongo-hadoop-core:1.3.1,org.mongodb:mongo-java-driver:3.1.0 [REST OF YOUR OPTIONS]

Некоторые из этих файлов jar не являются банками Uber и требуют больше зависимостей для загрузки до которые могут работать.

2
ответ дан asaad 19 August 2018 в 08:21
поделиться
  • 1
    Я получаю следующую ошибку, ссылающуюся на неудачные загрузки :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS Exception in thread "main" java.lang.RuntimeException: [download failed: com.google.guava#guava;11.0.2!guava.jar, ...... – Philip O'Brien 19 November 2015 в 10:35
  • 2
    Возможно, это была временная проблема с сетью. Можете ли вы попробовать еще раз? В чем заключается основное исключение? – asaad 19 November 2015 в 13:24
  • 3
    Ваше предложение действительно сработало для меня, но я почувствовал, что @ zero323 дал более полезный ответ и поэтому отметил, что это правильно. – Philip O'Brien 20 November 2015 в 10:27

У меня была такая же проблема вчера. Удалось зафиксировать его, поместив mongo-java-driver.jar в $HADOOP_HOME/lib и mongo-hadoop-core.jar и mongo-hadoop-spark.jar в $HADOOP_HOME/spark/classpath/emr (или в любую другую папку, которая находится в $SPARK_CLASSPATH).

Сообщите мне если это помогает.

0
ответ дан Dhruvkaran Mehta 19 August 2018 в 08:21
поделиться
  • 1
    Кажется, это не помогает, в $ HADOOP_HOME / lib у меня есть mongo-java-driver-3.0.4.jar , а затем в / usr / local / share / mongo-hadoop / spark / build / libs / У меня есть mongo-hadoop-core-1.4.1.jar и mongo-hadoop-spark-1.5.0 -SNAPSHOT.jar . Я передаю этот каталог при запуске задания $ SPARK_HOME / bin / spark-submit --driver-class-path / usr / local / share / mongo-hadoop / spark / build / libs / --master local [4] ~ / sparkPythonExample / SparkPythonExample.py – Philip O'Brien 12 November 2015 в 11:31

Удачи!

@see https://github.com/mongodb/mongo-hadoop/wiki/Spark-Usage

from pyspark import SparkContext, SparkConf

import pymongo_spark
# Important: activate pymongo_spark.
pymongo_spark.activate()


def main():
    conf = SparkConf().setAppName("pyspark test")
    sc = SparkContext(conf=conf)

    # Create an RDD backed by the MongoDB collection.
    # This RDD *does not* contain key/value pairs, just documents.
    # If you want key/value pairs, use the mongoPairRDD method instead.
    rdd = sc.mongoRDD('mongodb://localhost:27017/db.collection')

    # Save this RDD back to MongoDB as a different collection.
    rdd.saveToMongoDB('mongodb://localhost:27017/db.other.collection')

    # You can also read and write BSON:
    bson_rdd = sc.BSONFileRDD('/path/to/file.bson')
    bson_rdd.saveToBSON('/path/to/bson/output')

if __name__ == '__main__':
    main()
0
ответ дан larryhu 19 August 2018 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: