Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark自定义接收器使用spark流读取mongo更改流日志_Python_Python 3.x_Mongodb_Apache Spark_Pyspark - Fatal编程技术网

Python Pyspark自定义接收器使用spark流读取mongo更改流日志

Python Pyspark自定义接收器使用spark流读取mongo更改流日志,python,python-3.x,mongodb,apache-spark,pyspark,Python,Python 3.x,Mongodb,Apache Spark,Pyspark,我想使用spark streaming从mongodb change streams[末尾的链接]读取数据 这里要收集30秒的转储文件,然后放入某个文件。 我知道我可能需要编写一些自定义接收器(使用pyspark)来接收来自相关数据源的数据,但我找不到任何关于使用PYTHON的Spark流的自定义接收器的讨论文档 下面的文档链接还提到了使用java或scala 我使用简单的python代码从ChangeStreams读取数据,但它不能满足我的要求 注意:在下面的代码中,使用for循环逐个迭代c

我想使用spark streaming从mongodb change streams[末尾的链接]读取数据

这里要收集30秒的转储文件,然后放入某个文件。 我知道我可能需要编写一些自定义接收器(使用pyspark)来接收来自相关数据源的数据,但我找不到任何关于使用PYTHON的Spark流的自定义接收器的讨论文档

下面的文档链接还提到了使用java或scala

我使用简单的python代码从ChangeStreams读取数据,但它不能满足我的要求

注意:在下面的代码中,使用for循环逐个迭代
change\u流

导入操作系统
进口pymongo
从bson.json_util导入转储
STREAM_DB=“mongodb://:@:/authSource=admin&retryWrites=true”
client=pymongo.MongoClient(STREAM_DB)
change\u stream=client..watch()
打印(更改流)
f=开放式(“,“a”)
对于变更流中的变更:
f、 写入(转储(更改)+'\n')
f、 关闭()
我没有看到任何文档讨论使用PYTHON定制Spark流媒体接收器。 下面的文档链接还提到了使用java或scala

是否有一种方法可以使用spark读取流式mongodb更改流数据


[1] :

对我们有效的解决方案出现在评论部分

如果有人遇到过这样的情况,谁能帮我们一个忙?对我们有效的解决方案分两步进行,而不是直接尝试通过Spark。1) 使用作为服务运行的python独立脚本将Mongo变更流数据发送到Google Cloud PubSub。2) 用java编写自定义接收器,并使用pyspark(Spark流代码)访问该接收器。此github链接具有专门用于Spark PubSub链接的自定义接收器代码:
import os
import pymongo
from bson.json_util import dumps
STREAM_DB="mongodb://<username>:<pwd>@<host>:<port>/<database to be used> authSource=admin&retryWrites=true"

client = pymongo.MongoClient(STREAM_DB)
change_stream = client.<database name>.watch()
print(change_stream) 
f = open("<filename>", "a")
for change in change_stream:
    f.write(dumps(change) + '\n')
f.close()