Missing database name. Set via the ‘spark.mongodb.output.uri‘

Spark插入MongoDB出现的错误

解决方案:

1.确认是否在spark中配置了相关的库和表

2.检测是否出现1个以上的spark(我之前检查过配置都没有问题,demo也可以跑,但是我的离线用户画像却一直插入不进去。

仔细检查发现,我写了个sparkSession,也写了个sparkContext,但是我是sparkContext不是由sparkSession创建的。

所以就导致一个服务有多个sparkContext。那么它只会执行一个sparkContext。)

插入示例

  val database = "info_test"
    val collection = "course"
    val host = "127.0.0.1"
    val outPutUri = s"mongodb://$host/"


    val spark = SparkSession
      .builder()
      .master("local[2]")
      .config("spark.mongodb.output.uri", outPutUri)
      .config("spark.mongodb.output.database",database)
      .config("spark.mongodb.output.collection",collection)
      .config("spark.mongodb.output.maxBatchSize",1024)
      .appName("MongoSparkConnectorIntro")
      .getOrCreate()






    val testrdd = spark.sparkContext.parallelize(Array("{\"id\":\"202007304\",\"name\":\"李五\",\"sex\":\"男\",\"birthday\":\"1994-09-13\",\"province\":\"河北\"}"))
    import spark.implicits._ //隐式转换,自动帮你把上述json,转换成相对应的类
    //将rdd转换为dataset
    val testds= spark.createDataset(testrdd)
    //将dataset转换为dataframe
    val df = spark.read.json(testds)

    df.show()

    MongoSpark.save(
      df
        .write
        .mode(SaveMode.Append)//Append代表追加,Overwrite代表覆盖,写入的模式、
    )

你可能感兴趣的:(数据库,mongodb,spark)