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代表覆盖,写入的模式、
)