Spark从入门到入土(五):SparkSQL原理与实战

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Spark从入门到入土(五):SparkSQL原理与实战

SparkSQL是spark家族中一个结构化或半结构化数据的处理模块。对SQL的处理跟关系型数据库SQL类似,将SQL解析成一棵树,通过规则的模式匹配,对树进行绑定、优化,得到查询结果。


SparkSQL提供了一种特殊的RDD-DataFrame,相当于关系型数据的一个表,在Java API中,由行(row)组成的数据集(DataSet)表示为一个DataFrame。


用户程序在执行过程中,下图表示了从SQL语句到DataFrame的整个执行过程。


image.png

SparkSession


在spark1.x时代,SparkSQL的入口都是通过SQLContext 或者HiveContext完成,从1.6以后,引入了SparkSession概念,替代了SQLContext,实现对数据的加载、转换、处理等工作。


可以通过SparkSession.builder来创建一个SparkSession,也可以通过stop停止


SparkSQL与MongoDB的集成


Mongo对Spark的支持可参见Mongo官方文档MongoDB

public static void main(String[] args) throws AnalysisException {
        logger.info("开始执行告警统计spark任务");
        SparkSession spark = SparkSession.builder()
                .master("local")
                .appName("alarmService")
                .config("spark.mongodb.input.uri", MONGODB_INPUT_URL)
                .config("spark.mongodb.output.uri", MONGODB_OUTPUT_URL)
                .getOrCreate();
        Dataset ds = MongoSpark.load(spark, EmAlarmBean.class);
        ds.registerTempTable("test");
        ds = spark.sql(getSql());
        MongoSpark.save(ds);
    }
    private static String getSql() {
        String sql = "select orgId,from_unixtime(createTimestamp, 'yyyyMMdd') AS statisticDate, " +
                "sum(if(levelDictId='4001',1,0)) level1," +
                "sum(if(levelDictId='4002',1,0)) level2," +
                "sum(if(levelDictId='4003',1,0)) level3" +
                " from test " +
                " where (deviceType=0 or deviceType=2 or deviceType=3) and createTimestamp is not null and orgId is not null " +
                " group by from_unixtime(createTimestamp, 'yyyyMMdd'),orgId";
        return sql;
    }


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
3月前
|
移动开发 分布式计算 Spark
Spark的几种去重的原理分析
Spark的几种去重的原理分析
39 0
|
3月前
|
机器学习/深度学习 SQL 分布式计算
Spark核心原理与应用场景解析:面试经验与必备知识点解析
本文深入探讨Spark核心原理(RDD、DAG、内存计算、容错机制)和生态系统(Spark SQL、MLlib、Streaming),并分析其在大规模数据处理、机器学习及实时流处理中的应用。通过代码示例展示DataFrame操作,帮助读者准备面试,同时强调结合个人经验、行业趋势和技术发展以展现全面的技术实力。
|
3月前
|
存储 分布式计算 数据处理
bigdata-35-Spark工作原理
bigdata-35-Spark工作原理
31 0
|
3月前
|
设计模式 SQL 分布式计算
Spark Day06:Spark Core之Spark 内核调度和SparkSQL快速入门
Spark Day06:Spark Core之Spark 内核调度和SparkSQL快速入门
65 0
|
3月前
|
SQL 分布式计算 API
Spark学习------SparkSQL(概述、编程、数据的加载和保存)
Spark学习------SparkSQL(概述、编程、数据的加载和保存)
119 2
|
30天前
|
分布式计算 Apache Spark
|
2月前
|
分布式计算 监控 大数据
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
spark实战:实现分区内求最大值,分区间求和以及获取日志文件固定日期的请求路径
|
3月前
|
SQL 存储 分布式计算
spark执行sql的原理是什么
spark执行sql的原理是什么
70 1
|
3月前
|
SQL 分布式计算 Java
Spark学习---SparkSQL(概述、编程、数据的加载和保存、自定义UDFA、项目实战)
Spark学习---SparkSQL(概述、编程、数据的加载和保存、自定义UDFA、项目实战)
264 1
|
3月前
|
存储 分布式计算 Spark
实战|使用Spark Streaming写入Hudi
实战|使用Spark Streaming写入Hudi
222 0