31. Spark 读取mongo 使用withPipeline的用法:

31.

Spark 读取mongo 使用withPipeline的用法:

在工作中遇到过需要从一个公司列表中找出mongo中存在的公司信息。参考Mongo语法 $in可支持这个用法

https://docs.mongodb.com/manual/reference/operator/query/in/

需要配合spark的.withPipeline来使用。

https://docs.mongodb.com/spark-connector/current/scala/aggregation/

pipeline需要给出的条件是字符串,所以需要对一些字段转换成字符串即可

【 scala 的 mkstring 用法    https://blog.csdn.net/lan12334321234/article/details/84882002】

下面贴出关键的代码。

#dataFrame都只有公司名
val addCompanyNameArray = entryCompanyNameDF.except(stgCompanyNameDF).map(r => r.getString(0)).collect.toArray

#将公司Array转为字符串
// 将Array转换成String 
var addCompanyNameStr = addCompanyNameArray.mkString("\"", "\",\"", "\"")  

#读取Mongo的过程不做赘述
#下面 withPipeline 配合 $in来使用

val df = sc.loadFromMongoDB(readconf).withPipeline(Seq(Document.parse("{ $match: { 'name' : {$in : [" + addCompanyNameStr + "]} } }"))).toDF(schema)

 

此贴来自汇总贴的子问题,只是为了方便查询。

总贴请看置顶帖:

pyspark及Spark报错问题汇总及某些函数用法。

https://blog.csdn.net/qq0719/article/details/86003435

 

你可能感兴趣的:(31. Spark 读取mongo 使用withPipeline的用法:)