mysql collectset_Spark SQL里concat_ws和collect_set的作用

public classTpcCompute2 {public static voidmain(String[] args) {

SparkSession spark= SparkSession.builder().enableHiveSupport().appName("TpcCompute2").master("local").getOrCreate();

JavaSparkContext sc= newJavaSparkContext(spark.sparkContext());

sc.setLogLevel("ERROR");//hphm,id,tgsj,lonlat&

spark.udf().register("getTpc", newComputeUDF(), DataTypes.StringType);

spark.sql("use traffic");

spark.sql("select hphm,concat_ws('&',collect_set(concat_ws('_',id,kk_lon_lat,tgsj))) as concatValue from t_cltgxx t where t.tgsj>'2015-01-01 00:00:00' group by hphm").show(false);

Dataset cltgxxDF =spark.sql("select hphm,concatValue from (select hphm,getTpc(concat_ws('&',collect_set(concat_ws('_',id,kk_lon_lat,tgsj)))) as concatValue from t_cltgxx t where t.tgsj>'2015-01-01 00:00:00' group by hphm) where concatValue is not null");

cltgxxDF.show();//创建集合累加器

CollectionAccumulator acc =sc.sc().collectionAccumulator();

cltgxxDF.foreach(new ForeachFunction() {

@Overridepublic voidcall(Row row) throws Exception {

acc.add(row.getAs("concatValue"));

}

});

List values =acc.value();for(String id : accValues) {

System.out.println("accValues:" +id);

Dataset resultDF = spark.sql("select hphm,clpp,clys,tgsj,kkbh from t_cltgxx where id in (" + id.split("_")[0] + "," + id.split("_")[1] + ")");

resultDF.show();

Dataset resultDF2 = resultDF.withColumn("jsbh", functions.lit(newDate().getTime()))

.withColumn("create_time", functions.lit(new Timestamp(newDate().getTime())));

resultDF2.show();

resultDF2.write()

.format("jdbc")

.option("url","jdbc:mysql://lin01.cniao5.com:3306/traffic?characterEncoding=UTF-8")

.option("dbtable","t_tpc_result")

.option("user","root")

.option("password","123456")

.mode(SaveMode.Append)

.save();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值