标签: pymongo

让Spark,Python和MongoDB协同工作

我很难让这些组件正确编织在一起.我已经安装了Spark并成功运行,我可以在本地运行作业,独立运行,也可以通过YARN运行.我已经遵循了这里这里建议的步骤(据我所知)

我正在研究Ubuntu和我拥有的各种组件版本

我在执行各种步骤时遇到了一些困难,例如哪些罐子添加到哪条路径,所以我添加的是

  • /usr/local/share/hadoop-2.6.1/share/hadoop/mapreduce 我添加 mongo-hadoop-core-1.5.0-SNAPSHOT.jar
  • 以下环境变量
    • export HADOOP_HOME="/usr/local/share/hadoop-2.6.1"
    • export PATH=$PATH:$HADOOP_HOME/bin
    • export SPARK_HOME="/usr/local/share/spark-1.5.1-bin-hadoop2.6"
    • export PYTHONPATH="/usr/local/share/mongo-hadoop/spark/src/main/python"
    • export PATH=$PATH:$SPARK_HOME/bin

我的Python程序是基本的

from pyspark import SparkContext, SparkConf
import pymongo_spark
pymongo_spark.activate()

def main():
    conf = SparkConf().setAppName("pyspark test")
    sc = SparkContext(conf=conf)
    rdd = sc.mongoRDD(
        'mongodb://username:password@localhost:27017/mydb.mycollection')

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我正在使用该命令运行它

$SPARK_HOME/bin/spark-submit --driver-class-path /usr/local/share/mongo-hadoop/spark/build/libs/ --master local[4] ~/sparkPythonExample/SparkPythonExample.py
Run Code Online (Sandbox Code Playgroud)

我得到了以下输出结果

Traceback (most recent call last):
  File "/home/me/sparkPythonExample/SparkPythonExample.py", line 24, in …
Run Code Online (Sandbox Code Playgroud)

python hadoop mongodb pymongo apache-spark

35
推荐指数
1
解决办法
2万
查看次数

在pymongo快速或批量Upsert

如何在pymongo中进行批量upsert?我想更新一堆条目,一次做一个是非常慢的.

几乎完全相同的问题的答案在这里:MongoDB中的批量更新/ upsert?

接受的答案实际上没有回答这个问题.它只是提供了一个指向mongo CLI的链接,用于执行导入/导出.

我也愿意向某人解释为什么做大量upsert是不可能/没有最佳做法,但请解释这类问题的首选解决方案是什么.

python upsert mongodb nosql pymongo

33
推荐指数
5
解决办法
2万
查看次数

pymongo-如何为字段和其他查询参数提供不同的值

我正在使用pymongo并希望为字段设置不同的值,以便我也可以传递其他查询参数.例如,我有以下条目:

{
   id = "my_id1"
   tags: [tag1, tag2, tag3],
   category: "movie",
}
{
   id = "my_id2"
   tags: [tag3, tag6, tag9],
   category: "tv",
}
{
   id = "my_id3"
   tags: [tag2, tag6, tag8],
   category: "movie",
}
Run Code Online (Sandbox Code Playgroud)

所以我希望在电影类别下拥有所有不同的标签.任何人都可以指导我如何使用pymongo实现这一目标.在mongo javascript shell中,我发布了db.mycoll.distinct('tags',{category:"movie"}),它运行得很好.但是当我在pymongo中做同样的事情时,它会引发错误.我想pymongo不支持它.但是,任何想法都可以实现这样的任务.

python mongodb pymongo

33
推荐指数
3
解决办法
3万
查看次数

使用PyMongo将Pandas Dataframe插入mongodb

使用pongas DataFrame插入mongodb的最快方法是什么PyMongo

尝试

db.myCollection.insert(df.to_dict())
Run Code Online (Sandbox Code Playgroud)

发了错误

InvalidDocument: documents must have only string keys, the key was Timestamp('2013-11-23 13:31:00', tz=None)

db.myCollection.insert(df.to_json())
Run Code Online (Sandbox Code Playgroud)

发了错误

TypeError: 'str' object does not support item assignment

db.myCollection.insert({id: df.to_json()})
Run Code Online (Sandbox Code Playgroud)

发了错误

InvalidDocument: documents must have only string a keys, key was <built-in function id>

DF

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 150 entries, 2013-11-23 13:31:26 to 2013-11-23 13:24:07
Data columns (total 3 columns):
amount    150  non-null values
price     150  non-null values
tid       150  non-null values
dtypes: float64(2), int64(1)
Run Code Online (Sandbox Code Playgroud)

python mongodb pymongo python-2.7 pandas

32
推荐指数
4
解决办法
4万
查看次数

测试mongodb和pymongo中的空字符串

这是我的数据结构.

[{
"name": "David",
"lastname": "",
},
{
"name": "Angela"
}]
Run Code Online (Sandbox Code Playgroud)

"姓氏"有时存在,有时不存在,有时则为"".

我想获得所有姓氏不等于""的行.但这不起作用.当lastname为""并且lastname完全不存在时,它返回两行.在上面的例子中,我想只获取David节点.

db.collection.find( {"lastname": {"$ne": ""}} )
Run Code Online (Sandbox Code Playgroud)

mongodb pymongo

31
推荐指数
2
解决办法
4万
查看次数

如何检查pymongo游标是否有查询结果

我需要检查find语句是否返回非空查询.

我在做的是以下内容:

query = collection.find({"string": field})
if not query: #do something
Run Code Online (Sandbox Code Playgroud)

然后我意识到我的if语句从未执行过因为find返回游标,或者查询是否为空.

因此我检查了文档,找到了两种可以帮助我的方法:

  1. count(with_limit_and_skip=False) 其中(来自说明):

    返回此查询的结果集中的文档数.

    这似乎是一个很好的检查方法,但这意味着我需要计算光标中的所有结果,以确定它是否为零,对吧?有点贵吗?

  2. retrieved 其中(来自说明):

    到目前为止检索的文件数量.

    我在一个空的查询集上测试它并返回零,但它不清楚它做了什么,我不知道它是否适合我.

那么,检查查询是否find()返回空集的最佳方法(最佳实践)是什么?上面描述的方法之一是否适用于此目的?性能怎么样?还有其他方法吗?


需要明确的是:我需要知道查询是否为空,我想找到关于性能和pythonic的光标的最佳方法.

python mongodb pymongo mongodb-query

31
推荐指数
3
解决办法
3万
查看次数

为什么使用update_one引发记录会引发ValueError?

如果密钥尚不存在,我想在集合中添加记录.我理解[MongoDB] [1]提供了upsert这个,所以我做了一个

db.collection.update({"_id":"key1"},{"_id":"key1"},True) 
Run Code Online (Sandbox Code Playgroud)

这似乎有效.

但是在Pymongo文档中,它表示不推荐使用更新并使用update_one().

但:

db.collection.update_one({"_id":"key1"},{"_id":"key1"},True)
Run Code Online (Sandbox Code Playgroud)

得到:

raise ValueError('update only works with $ operators')
ValueError: update only works with $ operators
Run Code Online (Sandbox Code Playgroud)

我真的不明白为什么update_one不同以及为什么我需要使用$运算符.有人可以帮忙吗?

python mongodb pymongo mongodb-query

31
推荐指数
2
解决办法
2万
查看次数

使用pyMongo创建ISODate

我一直试图找到一种方法来创建一个与pyMongo客户端相关的ISODate对象,但到目前为止还没有任何成功.

我使用http://pypi.python.org/pypi/pymongo3客户端,这是目前Python 3中唯一可用的严重客户端,但问题似乎不是来自这个特定的pymongo版本.

我想知道你是否有人找到了从pymongo客户端使用这个MongoDB对象类型的解决方案...感谢您的帮助!

mongodb pymongo python-3.x isodate

30
推荐指数
2
解决办法
5万
查看次数

将pymongo游标转换为json

  • 我知道这是一个相当普遍的问题.我正在写一个小的Flask应用程序,我正在尝试将一些查询反馈给视图.我连接到我的本地MongoDB设置,并成功查询 - 但我不能用它生成一个json对象.

我见过的最常见的解决方案是从pymongo ie导入json_util

import json
from pymongo import json_util

results = connection.get_collection('papayas_papaya')
results = results.find({
    'identifier': '1',
})
serialized_results = [json.dumps(result, default=json_util.default, separators=(',', ':')) for result in results]
Run Code Online (Sandbox Code Playgroud)

我使用pip将pymongo安装到我的Flask virtualenv中,即:

pip install pymongo
Run Code Online (Sandbox Code Playgroud)

运行上面的代码时,我不断收到以下错误:

ImportError: cannot import name json_util
Run Code Online (Sandbox Code Playgroud)

我可以在pymongo-2.3-py2.6.egg-info/installed-files.txt ../bson/json_util.py中看到这一行

任何人都有任何提示可以帮我弄清楚我做错了什么?

更新:进一步了解这一点 - 我已经设法让这个工作:

import pymongo
from bson.json_util import dumps

connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs

def get():
    cursor = db.foo.find({"name" : "bar"})
    return dumps(cursor)
Run Code Online (Sandbox Code Playgroud)

我遇到的一个问题是试图独立安装bson - pymongo带来bson并分别导入bson导致问题.

感谢@Cagex指出我正确的方向

pymongo

28
推荐指数
2
解决办法
2万
查看次数

如何使用PyMongo删除MongoDB数据库?

我想在MongoDB中删除一个数据库

use <DBNAME>
db.dropDatabase()
Run Code Online (Sandbox Code Playgroud)

在Mongo shell中.

我如何在PyMongo中做到这一点?

python mongodb pymongo

28
推荐指数
2
解决办法
2万
查看次数