在scala中使用spark sql解决特定需求

Posted 我是攻城师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在scala中使用spark sql解决特定需求相关的知识,希望对你有一定的参考价值。

接着上篇文章,本篇来看下如何在scala中完成使用spark sql将不同日期的数据导入不同的es索引里面。

首下看下用到的依赖包有哪些:

在scala中使用spark sql解决特定需求(2)

下面看相关的代码,代码可直接在跑在win上的idea中,使用的是local模式,数据是模拟造的:


分析下,代码执行过程:

(1)首先创建了一个SparkSession对象,注意这是新版本的写法,然后加入了es相关配置

(2)导入了隐式转化的es相关的包

(3)通过Seq+Tuple创建了一个DataFrame对象,并注册成一个表

(4)导入spark sql后,执行了一个sql分组查询

(5)获取每一组的数据

(6)处理组内的Struct结构

(7)将组内的Seq[Row]转换为rdd,最终转化为df

(8)执行导入es的方法,按天插入不同的索引里面

(9)结束

需要注意的是必须在执行collect方法后,才能在循环内使用sparkContext,否则会报错的,在服务端是不能使用sparkContext的,只有在Driver端才可以。



以上是关于在scala中使用spark sql解决特定需求的主要内容,如果未能解决你的问题,请参考以下文章

spark定制之六:sql版start.scala

使用 Spark 和 Scala 从两个表中提取所需信息

在 Spark 中处理日期

如何在 Spark Scala SQL 查询中包含 0 值?

使用 Spark/Scala 有效地按键分组并查找在特定时间窗口中发生的事件的上一个时间戳

将 spark.sql 查询转换为 spark/scala 查询