Spark SQL里concat_ws和collect_set的作用
concat_ws: 用指定的字符连接字符串
例如:
连接字符串:
concat_ws("_", field1, field2),输出结果将会是:“field1_field2”。
数组元素连接:
concat_ws("_", [a,b,c]),输出结果将会是:"a_b_c"。
collect_set: 把聚合的数据组合成一个数组,一般搭配group by 使用。
例如有下表T_course;
| id | name | course | 
| 1 | zhang san | Chinese | 
| 2 | zhang san | Math | 
| 3 | zhang san | English | 
spark.sql("select name, collect_set(course) as course_set from T_course group by name");
结果是:
| name | course_set | 
| zhang san | [Chinese,Math,English] | 
贴上套牌车项目代码:
public class TpcCompute2 {
    public static void main(String[] args) {
        SparkSession spark = SparkSession.builder().enableHiveSupport().appName("TpcCompute2").master("local").getOrCreate();
        JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
        sc.setLogLevel("ERROR");
        //hphm,id,tgsj,lonlat&
        spark.udf().register("getTpc", new ComputeUDF(), 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<Row> 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<String> acc = sc.sc().collectionAccumulator();
        cltgxxDF.foreach(new ForeachFunction<Row>() {
            @Override
            public void call(Row row) throws Exception {
                acc.add(row.getAs("concatValue"));
            }
        });
        List<String> values = acc.value();
        for (String id : accValues) {
            System.out.println("accValues: " + id);
            Dataset<Row> resultDF = spark.sql("select hphm,clpp,clys,tgsj,kkbh from t_cltgxx where id in (" + id.split("_")[] + "," + id.split("_")[] + ")");
            resultDF.show();
            Dataset<Row> resultDF2 = resultDF.withColumn("jsbh", functions.lit(new Date().getTime()))
                    .withColumn("create_time", functions.lit(new Timestamp(new Date().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","")
                    .mode(SaveMode.Append)
                    .save();
    }
}
spark.sql语句输出样式:

Spark SQL里concat_ws和collect_set的作用的更多相关文章
- 第三篇:Spark SQL Catalyst源码分析之Analyzer
		/** Spark SQL源码分析系列文章*/ 前面几篇文章讲解了Spark SQL的核心执行流程和Spark SQL的Catalyst框架的Sql Parser是怎样接受用户输入sql,经过解析生成 ... 
- Spark SQL Catalyst源代码分析之Analyzer
		/** Spark SQL源代码分析系列文章*/ 前面几篇文章解说了Spark SQL的核心运行流程和Spark SQL的Catalyst框架的Sql Parser是如何接受用户输入sql,经过解析生 ... 
- 第九篇:Spark SQL 源码分析之 In-Memory Columnar Storage源码分析之 cache table
		/** Spark SQL源码分析系列文章*/ Spark SQL 可以将数据缓存到内存中,我们可以见到的通过调用cache table tableName即可将一张表缓存到内存中,来极大的提高查询效 ... 
- 整理对Spark SQL的理解
		Catalyst Catalyst是与Spark解耦的一个独立库,是一个impl-free的运行计划的生成和优化框架. 眼下与Spark Core还是耦合的.对此user邮件组里有人对此提出疑问,见m ... 
- 转】 Spark SQL UDF使用
		原博文出自于: http://blog.csdn.net/oopsoom/article/details/39401391 感谢! Spark1.1推出了Uer Define Function功能,用 ... 
- Spark SQL CLI 实现分析
		背景 本文主要介绍了Spark SQL里眼下的CLI实现,代码之后肯定会有不少变动,所以我关注的是比較核心的逻辑.主要是对照了Hive CLI的实现方式,比較Spark SQL在哪块地方做了改动,哪些 ... 
- spark sql的agg函数,作用:在整体DataFrame不分组聚合
		.agg(expers:column*) 返回dataframe类型 ,同数学计算求值 df.agg(max("age"), avg("salary")) df ... 
- 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL
		周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ... 
- 【转载】Spark SQL之External DataSource外部数据源
		http://blog.csdn.net/oopsoom/article/details/42061077 一.Spark SQL External DataSource简介 随着Spark1.2的发 ... 
随机推荐
- windows系统获取进程的pid号并终止
			,,,* delims= " %a in ('tasklist ^| findstr "AutodeskDesktopApp.exe"') do (set commitd ... 
- 【使用DIV+CSS重写网站首页案例】CSS盒子模型
			CSS盒子模型 取值问题: 默认情况,padding.border.margin都为0: 设定区域内容的width和height,是区域内容框的尺寸: 如果设定padding/border/margi ... 
- Alibaba Java Coding Guidelines,以后我的Java代码规范,就靠它了
			前言 对于Java代码规范,业界有统一的标准,不少公司对此都有一定的要求.但是即便如此,庞大的Java使用者由于经验很水平的限制,未必有规范编码的意识,而且即便经验丰富的老Java程序员也无法做到时刻 ... 
- 第六篇 -- LINQ to XML
			一.LINQ to XML常用成员 LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument EmptySequence 获取空的元 ... 
- Java 执行
			java -cp****.jar ****.****.className [args] linux 下 -cp 参数使用 : 分割 一般都是 .:lib/* windows 下使用 ; 分割 
- oVirt-postgresql
			连接数据库 方法一: cd /opt/rh/rh-postgresql95/root/bin su postgres ./psql \c engine 执行sql语句即可 方法二: 用pgAdmin访 ... 
- 201671010418  刘佳  实验十四  团队项目评审&课程学习总结
			项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 (1)掌握软件项目评审会流程: (2)反思总结课程学习内容. Start: ... 
- nginx 获取源IP 获取经过N层Nginx转发的访问来源真实IP
			1. nginx 配置文件中获取源IP的配置项 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #一般的we ... 
- 使用kubeadm 安装 kubernetes 1.15.1
			简介: Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿.kubernetes1.5版本以及之前,安装 ... 
- c#接口interface学习
			好久没学习C#了,上次已经学习到了接口这块,感觉有点不太好理解,因此重新学习,在vs上面运行了,本来不想写博客的,但是正好看到网上有人说,写博客可以加深印象,因此,写吧. 下面是菜鸟教程的实例 usi ... 
