spark整理数据放入mysql

spark我还是新手,所有对他不是特别熟悉,但是在整理完数据之后,我需要生成表并且放入我想要的数据,所以发现了两种不同的方式。

1.生成List

2.JavaRDD

第一种方式:(连接到我上一篇文章中的生成的Map

List rows = new ArrayList<>();
Iterator> itMap = map.entrySet().iterator();
while(itMap.hasNext()){//遍历map
    Entry entry = itMap.next();
    int key = entry.getKey();
    List list2 = entry.getValue();
    for(int i = 0;i df_target = sparkSession.createDataFrame(rows, schema);
df_target.show();//打印内容
df_target.write().mode(SaveMode.Append).jdbc(properties.getProperty("url_jdbc_master"),"analyze_point", this.properties);
//连接数据库,创建表,添加内容

创建表结构(表中的字段类型与所添加的内容字段类型必须一致):

StructType createSchema() {
StructType ret = new StructType()//表的列名及表的字段类型,字段注释
    .add(new StructField("orgId",DataTypes.IntegerType,true,Metadata.empty()).withComment("orgId"))
    .add(new StructField("morePhoneLogin", DataTypes.IntegerType, true, Metadata.empty()).withComment("xx"))
    .add(new StructField("openAccountMore", DataTypes.IntegerType, true, Metadata.empty()).withComment("xx"))
    .add(new StructField("remoteLogin", DataTypes.IntegerType, true, Metadata.empty()).withComment("xx"))
    .add(new StructField("time", DataTypes.TimestampType, true, Metadata.empty()).withComment("时间"));
return ret;
}


第二种:(dsAccountCount :根据mysql语句从数据库中返回整理的数据,放入数据库中新表中 ,类型为DataSet

JavaRDD rdd_target= dsAccountCount.toJavaRDD().map(t2->{
    return RowFactory.create(t2.get(0),t2.get(1),t2.get(2),new Timestamp(new java.util.Date().getTime()));//根据下标来获取内容
});
StructType schema = createSchema();//上面已经贴出生成新表结构样式
Dataset df_target = sparkSession.createDataFrame(rdd_target, schema);
df_target.show();
df_target.write().mode(SaveMode.Append).jdbc(this.properties.getProperty(PropertyKeys.URL_JDBC_MASTER),"analyze_point_operator_login", this.properties);

你可能感兴趣的:(spark)