python - Kedro 与 MongoDB 和其他文档数据库?

标签 python mongodb kedro

将 kedro 与 MongoDB 或其他文档数据库结合使用的最佳实践是什么?例如,MongoDB 没有类似于 SQL 的查询语言。 Python 中的大多数 Mongo“查询”(使用 PyMongo)将如下所示:

from pymongo import MongoClient
client = MongoClient(...)  // Credentials go here

posts = client.test_database.posts

posts.find_one({"author": "Mike"})

然后你会得到如下的结果:

{u'_id': ObjectId('...'),
 u'author': u'Mike',
 u'date': datetime.datetime(...),
 u'tags': [u'mongodb', u'python', u'pymongo'],
 u'text': u'My first blog post!'}

现在我的问题是:逻辑应该去哪里找到这篇文章,然后将其解析为数据帧?尝试创建 MongoQueryDataSet 类似乎并不合适,因为如果您想支持插入、聚合等功能,您最终将不得不使用笨重的 yaml 参数包装整个 PyMongo API。

MongoDataSet 类是否应该只返回 MongoClient 对象并捕获 kedro 节点中的任何进一步逻辑?

一般来说,当您使用具有这些功能性(非 SQL)API 而没有简单查询字符串的数据库时,数据加载逻辑应该位于哪里?

最佳答案

Where should the logic go to find this post and then parse it into a dataframe?

Imo,MongoDataSet 并不是一个坏主意。 Kedro 已经获得了相当多的 contrib datasets包装各种源的 IO 逻辑,所以对我来说 MongoDataSet 非常适合这个逻辑。

You'll end up having to wrap the entire PyMongo API with clunky yaml arguments if you want to support things like inserts, aggregations, etc.

我想说,立即创建整个 pymongo 的完整包装器并不是一个强烈的要求。即使您的数据集只能在加载时执行 find() 和在保存时执行 insert_many(),这也已经是一个好的开始。

Should a MongoDataSet class just return a MongoClient object and capture any further logic in a kedro node?

Kedro 有这个 philosophy节点是纯 Python 函数,这种方法对我来说非常不同,因为节点在处理数据加载和保存的方式上接受了太多的“控制”。此外,它还会破坏数据集之间的可互换性 - 如果您(或其他人)决定将来放弃 MongoDataSet 并将其交换为其他内容(例如 JSONLocalDataSetJSONBlobDataSet) 在您的项目中,它将仅适用于“纯”节点,但不适用于 MongoClient - 您也必须更改节点逻辑 - 这是 Kedro 建议避免的.

<小时/>

作为另一个并不意味着创建新数据集的选项,您还可以考虑使用 kedro.io.LambdaDataSet - 您需要提供自己的用于保存和加载的 Hook 。但请注意,LambdaDataSet 无法在 catalog.yml 中定义,必须在 Python 端“手动”添加到 DataCatalog 中.

关于python - Kedro 与 MongoDB 和其他文档数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940390/

相关文章:

mongodb - 如何在 MongoDB 中调试存储的 javascript 函数?

Node.js 和 MongoDB 时区问题 驱动程序未正确转换 UTC?

python - 以编程方式加载现有数据目录

python - 为什么条件 "else"在我的 python 代码中不起作用

python - tensorflow.contrib 中的 KMeans 与 KMeansClustering

python - pip 安装 libxml2 失败

node.js - Node Express API 速度慢(使用 Mongodb)

python - 属性错误 : Object ParquetDataSet cannot be loaded from kedro. extras.datasets.pandas

python - 在Kedro Notebook中设置参数

python - 计算广义范围的长度