Spark Scala将数据帧写入MongoDB

时间:2020-08-08 20:29:22

标签: mongodb scala apache-spark apache-spark-sql

我正在尝试以此为指导将转换后的数据帧写入MongoDB

https://docs.mongodb.com/spark-connector/master/scala/streaming/

到目前为止,我从MongoDB读取数据框架的工作非常完美。如下所示。

  val mongoURI = "mongodb://000.000.000.000:27017"
  val Conf = makeMongoURI(mongoURI,"blog","articles")
  val readConfigintegra: ReadConfig = ReadConfig(Map("uri" -> Conf))


  val sparkSess = SparkSession.builder()
    .master("local")
    .appName("MongoSparkConnectorIntro")
    .config("spark.mongodb.output.uri", "mongodb://000.000.000.000:27017/blog.vectors")
    .getOrCreate()



  // Uses the ReadConfig
  val df3 = sparkSess.sqlContext.loadFromMongoDB(ReadConfig(Map("uri" -> "mongodb://000.000.000.000:27017/blog.articles")))

但是,将数据帧写入MongoDB似乎更加困难。

 //reads data from mongo and does some transformations
    val data = read_mongo()
    data.show(20,false)
    data.write.mode("append").mongo()

对于最后一行,我收到以下错误。

Exception in thread "main" java.lang.IllegalArgumentException: Missing database name. Set via the 'spark.mongodb.output.uri' or 'spark.mongodb.output.database' property

当我在上面的代码块中的spark会话中进行设置时,这让我感到困惑。

 val sparkSess = SparkSession.builder()
    .master("local")
    .appName("MongoSparkConnectorIntro")
    .config("spark.mongodb.output.uri", "mongodb://000.000.000.000:27017/blog.vectors")
    .getOrCreate()

你能发现我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

我的回答与我的阅读方式非常相似,但改用writeConfig。

data.saveToMongoDB(WriteConfig(Map("uri" -> "mongodb://000.000.000.000:27017/blog.vectors")))