spark如何将数据写入mongo

业务中的数据库使用的mongo,离线使用spark计算的每天统计指标需要累加到历史指标中,然后将结果写到mongo库中。如果mongo库中已经有这条记录则覆盖,mongo库中没有此记录则为新增。

 

官方文档:https://docs.mongodb.com/spark-connector/master/java/write-to-mongodb/

根据此文档进行RDD写入,只会覆盖原有数据,无法更新,不符合需求。

 

Mongo Spark Connector不支持更新RDD,只有Dataset的数据形式才能更新;

所以将结果Dataset进行Append的形式写入mongo即可,因为mongo的主键是_id,所以要将Row的主键改成_id的列名。

 

具体实操如下:

 

Dataset rowDataset = spark.sql("select * from A");
Dataset mongoData = rowDataset.withColumnRenamed("itemId", "_id");
// Create a custom WriteConfig
Map writeOverrides = new HashMap<>();
writeOverrides.put("collection", "test_collection");
WriteConfig writeConfig = WriteConfig.create(jsc).withOptions(writeOverrides);

MongoSpark.save(mongoData.write().mode(SaveMode.Append), writeConfig);
如果是Dataset形式的数据则调用.toDF()先转成Dataset
 
  

 

参考资料:https://www.jianshu.com/p/65f16fb61e96

你可能感兴趣的:(大数据)