Spark学习(十二):应用库之Spark SQL
liebian365 2024-10-28 17:16 18 浏览 0 评论
1. 应用库Spark SQL
(1)SparkSql概念简介:
spark sql是为了处理结构化数据的一个spark 模块。不同于spark rdd的基本API,spark sql接口更多关于数据结构本身与执行计划等更多信息。在spark内部,sql sql利用这些信息去更好地进行优化。
(2)Spark SQL的特点:
1、支持多种数据源:Hive、RDD、Parquet、JSON、JDBC等。
2、多种性能优化技术:in-memory columnar storage、byte-code generation、cost model动态评估等。
3、组件扩展性:对于SQL的语法解析器、分析器以及优化器,用户都可以自己重新开发,并且动态扩展。
(3)Spark SQL的代码实现方式:
有如下几种方式执行spark sql:SQL,DataFramesAPI与Datasets API。这些之前已经介绍。
(4)Spark SQL的起始点:SQLContext:
spark sql所有功能的入口是SQLContext类,或者SQLContext的子类。为了创建一个基本的SQLContext,需要一个SparkContext。核心代码如下:
// 得到spark的上下文
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
// 通过spark的基础上下文得到sparksql的上下文
SQLContext sqlContext = new SQLContext(jsc);
2. Spark SQL的Java风格的代码案例
案例介绍:
读取一个存储在hdfs中的json文件,通过Spark SQL的dataframe操作,读取文件内容,并注册一个临时的表,基于这个临时表,利用spark sql的DataFrame对临时表进行sql操作,并将sql的结果打印在控制台上。
编码步骤:
1) 在linux上创建一个json文件people.json,文件内容如下:
{
"people": [
{ "name": "shu1", "age":11 },
{ "name": "shu2", "age":22 },
{ "name": "shu3", "age":33 }
]
}
2)将文件上传到hdfs上,切换到hdfs的bin目录下利用以下命令:
hadoop fs –put 本地文件位置 hdfs的目录
3)创建工程sparkst,将工程的jdk置为1.8,并且引入如下jar包:
spark-assembly-1.6.2-hadoop2.6.0.jar
此包可以在spark的安装目录的lib子目录下找到,找到后引入到eclipse中。
4)建立包com.gongyunit.sparkst
5)在该包下创建类TestSparkSql,具体代码如下:
6) 将sparkst工程打成jar包,上传到spark所在的服务器的某一目录下,这里以在spark的安装目录的code子目录下为例。
7)然后执行如下命令,执行该jar包:
spark-submit --master spark:// ip :7077 --executor-memory 500m --class com.gongyunit.sparkst. TestSparkSql ./code/sparkst.jar hdfs:// ip :9000/spark/people.json
补充:实际操作是要讲ip换成你的实际spark的所在ip地址
相关推荐
- C#委托—马工教你轻松玩转委托(c#中委托)
-
前言大家好,我是马工!在C#中有一个小白谈之色变的知识点叫委托,很多学了一两年C#的还不知道委托究竟是什么东西,本文就来帮你彻底解开解惑,从此委托就是小儿科!...
- AR农业种植指导(农业种植模式)
-
以下是一些常见的AR/VR在农业中的应用场景及相关源码示例的一些思路(注意,完整且复杂的源码通常需要根据具体需求和大量开发工作来完成,这里只是简单示例):1.AR农业种植指导-功能描述:通过AR...
- C#中timer中的enable和start以及stop的作用分别是什么?
-
文章来自AI问答的摘录。在C#中,System.Timers.Timer和System.Windows.Forms.Timer都提供了Enabled属性以及Start()和Stop()方法来控制定时器...
- AOP实现原理浅析(简述aop的原理以及作用)
-
在C#中实现一个简单的动态代理框架,可以通过反射和System.Reflection.Emit命名空间动态生成代理类。以下是一个分步指南和示例代码:...
- 如何防止数据库服务器的 SQL 注入攻击
-
如何防止数据库服务器的SQL注入攻击防止SQL注入攻击需要从代码开发、数据库配置到安全运维的全流程防护。以下是详细且可操作的防护策略和步骤:...
- Java静态三剑客(静态内部类/静态方法/静态类)的正确打开方式
-
作为Java程序员必知的"静态三剑客",它们看似简单却暗藏玄机!本文将带你解锁高阶玩法,避免99%开发者都会踩的坑!一、概念速览(颠覆传统认知)...
- 生成AutoCAD图纸批量合并代码(autocad怎么合并图纸)
-
想要生成AutoCAD图纸批量合并的代码。首先,我需要确定他使用哪个版本的AutoCAD,因为不同版本的API可能不同,比如VBA、.NET(C#或VB.NET)或者AutoLISP。不过用户没有具体...
- C#从入门到精通(4)—Linq实现集合快速转换、筛选、排序、分组
-
前言大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在C#开发中需要经常对集合中的数据进行处理,比如我需要将一个Int类型的集合数...
- CSharp(dotNet)绝版面试题,面试大全(二)
-
21.简述C#的密封类和密封方法?C#中,密封类和密封方法都是使用sealed修饰。密封类表示这个类不能被继承。密封方法表示这个方法不能被重写,和virtual方法相对。22.请介绍C#静态构造器的特...
- C#从入门到精通(7)—C#裁剪图像的几种方法总结
-
前言大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在上位机软件开发过程中经常需要裁剪图像,本文就是对c#中常见的裁剪图像方法进行...
- Csharp 进度条的使用(c#进度条是哪个控件)
-
【开发过程】(1)创建一个Windows应用程序,项目名称为Ex047,窗体默认为Form"(2)在窗体中添加菜单、工具栏和状态栏。(3)面添加ProgressBar.设置。(4)在窗体载入Loa...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)