通过Mongo读取的Spark数据过滤器

时间:2019-09-25 07:46:15

标签: python-3.x mongodb pyspark-sql databricks

我正在使用python笔记本从mongo的databricks中获取数据。但是我不确定如何用一个常规字段和一个数组组合来过滤数据。谁能帮我吗?

第一步:连接到Mongo

Step2:在下面的结构中定义

Input_Schema= StructType([StructField("lot",StringType(),True),
              StructField("lot_status",StringType(),True),
            StructField("recipients",ArrayType(
                StructType([
                StructField("account",StringType(),True),
                StructField("id",IntegerType(),True),
                StructField("type",StringType(),True),
                StructField("status",StringType(),True)             
                ])))]) 

Step3:创建用于过滤数据的管道

pipeline = [{'$match':{'lot_status':'fetch'}}]

使用上述管道,我们仅提取状态为'fetch'的那些批次

Step4:使用以下语句获取数据

Data = spark.read.format("com.mongodb.spark.sql.DefaultSource").option("uri",connectionstring).option("pipeline",pipeline).schema(input_schema).load()

display(Data)

获取所有具有lot_status ='Fetch'的批次的输出

但是我需要从数组中添加一个过滤器

其中状态=“获取”。现在使用管道,我可以使用lot_status过滤数据,但是我不确定如何使用两个条件进行过滤。

如果我尝试在下面使用它,它正在从接收者状态中获取所有集合(获取和不获取)

 pipeline = [{'$match':{ '$and': [ { 'lot_status':'Fetch' }, {'recipients.status':'Fetch'} ] }}]

0 个答案:

没有答案