Apache spark 如何使用Pyspark从mongodb中仅提取特定行?
我正在从mongodb集合中提取数据,并使用Spark python代码将其写入bigquery表 下面是我的代码片段:Apache spark 如何使用Pyspark从mongodb中仅提取特定行?,apache-spark,pyspark,apache-spark-sql,spark-streaming,Apache Spark,Pyspark,Apache Spark Sql,Spark Streaming,我正在从mongodb集合中提取数据,并使用Spark python代码将其写入bigquery表 下面是我的代码片段: df = spark.read\ .format("com.mongodb.spark.sql.DefaultSource")\ .option("uri","mongodb_url")\ .option("database","db_name")\
df = spark.read\
.format("com.mongodb.spark.sql.DefaultSource")\
.option("uri","mongodb_url")\
.option("database","db_name")\
.option("collection", "collection_name")\
.load()
df.write \
.format("bigquery") \
.mode("append")\
.option("temporaryGcsBucket","gcs_bucket") \
.option("createDisposition","CREATE_IF_NEEDED")\
.save("bq_dataset_name.collection_name")
这将从mongodb集合中提取所有数据。但是我只想提取满足条件的文档(比如sql查询中的where条件)
我发现的一种方法是读取数据帧中的全部数据,并在该数据帧上使用过滤器,如下所示:
df2 = df.filter(df['date'] < '12-03-2020 10:12:40')
df2=df.filter(df['date']<'12-03-2020 10:12:40')
但由于我的源mongo集合有8-10GB的数据,我无法每次都从mongo读取全部数据
使用spark.read从mongo读取数据时,如何使用筛选?即使在应用筛选后,您是否已尝试检查是否扫描了整个数据 假设您使用的是with spark,则支持过滤器/谓词下推 “谓词下推”是从连接器和 Catalyst optimizer自动将谓词“下推”到数据 节点。我们的目标是最大限度地利用网络过滤掉的数据量 数据存储端,然后将其加载到Spark的节点内存中 MongoDB的连接器会自动向下推送两种谓词:
子句(投影)作为选择
$project
子句内容(过滤器
)作为一个或多个其中
$match