Missing database name. Set via the 'spark.mongodb.output.uri' or..问题解决

spark数据入mongo报错:

User class threw exception: java.lang.IllegalArgumentException: Missing database name. Set via the 'spark.mongodb.output.uri' or 'spark.mongodb.output.database' property

核心代码如下:

val conf = new SparkConf().setAppName("AdxTrafficDaily")
conf.set("spark.mongodb.output.uri", s"$MongoConn/$databaseName.$ResultCol?replicaSet=mgset-17888xxx&authSource=admin")
conf.set("spark.mongodb.input.uri", s"$MongoConn/$databaseName.$ResultCol?replicaSet=mgset-17888xxx&authSource=admin")
val ss = SparkSession.builder().enableHiveSupport().getOrCreate()

val mongoConn = MongoConnector(conf)
val CountResult = ss.sql(
    s"""
   select adx, region, hostName from
     test.test
   where day='%s'
  """.format(Day)
)

val FilterDoc = new Document("day", Day)
mongoConn.withCollectionDo(new WriteConfig(databaseName,
 ResultCol, Option(MongoConn)), {col: MongoCollection[Document] =>
 col.deleteMany(FilterDoc)})

val insertRdd =CountResult.rdd.repartition(5).map(itm => {
  val insertOne = new Document("day", Day).append("adx", itm(0)).append("region", itm(1)).append("hostName", itm(2)) 
  insertOne
 })
MongoSpark.save(insertRdd)
ss.stop()

明眼人可能已经看到了问题的错误在哪里了,MongoSpark插件使用的配置是从sparksession中活得的,而上面额sparksession创建语句没有吧conf加进来
原理的sparksession创建为:

val ss = SparkSession.builder().enableHiveSupport().getOrCreate()

修改后为:

val ss = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()

conf **.config(conf)**传进来了,MongoSpark就可以从sparksession中取到对应的配置,问题迎刃而解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值