201 Spark SQL查询程序
2023-09-11 14:15:40 时间
前面我们学习了如何在Spark Shell中使用SQL完成查询,现在我们来实现在自定义的程序中编写Spark SQL查询程序。
首先在maven项目的pom.xml中添加Spark SQL的依赖:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.5.2</version>
</dependency>
1.通过反射推断Schema
创建一个object为cn.itcast.spark.sql.InferringSchema
package cn.itcast.spark.sql
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SQLContext
object InferringSchema {
def main(args: Array[String]) {
//创建SparkConf()并设置App名称
val conf = new SparkConf().setAppName("SQL-1")
//SQLContext要依赖SparkContext
val sc = new SparkContext(conf)
//创建SQLContext
val sqlContext = new SQLContext(sc)
//从指定的地址创建RDD
val lineRDD = sc.textFile(args(0)).map(_.split(" "))
//创建case class
//将RDD和case class关联
val personRDD = lineRDD.map(x => Person(x(0).toInt, x(1), x(2).toInt))
//导入隐式转换,如果不到人无法将RDD转换成DataFrame
//将RDD转换成DataFrame
import sqlContext.implicits._
val personDF = personRDD.toDF
//注册表
personDF.registerTempTable("t_person")
//传入SQL
val df = sqlContext.sql("select * from t_person order by age desc limit 2")
//将结果以JSON的方式存储到指定位置
df.write.json(args(1))
//停止Spark Context
sc.stop()
}
}
//case class一定要放到外面
case class Person(id: Int, name: String, age: Int)
将程序打成jar包,上传到spark集群,提交Spark任务
/usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-submit \
--class cn.itcast.spark.sql.InferringSchema \
--master spark://node1.itcast.cn:7077 \
/root/spark-mvn-1.0-SNAPSHOT.jar \
hdfs://node1.itcast.cn:9000/person.txt \
hdfs://node1.itcast.cn:9000/out
查看运行结果
hdfs dfs -cat hdfs://node1.itcast.cn:9000/out/part-r-*
2.通过StructType直接指定Schema
创建一个object为cn.itcast.spark.sql.SpecifyingSchema
package cn.itcast.spark.sql
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.sql.types._
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by ZX on 2015/12/11.
*/
object SpecifyingSchema {
def main(args: Array[String]) {
//创建SparkConf()并设置App名称
val conf = new SparkConf().setAppName("SQL-2")
//SQLContext要依赖SparkContext
val sc = new SparkContext(conf)
//创建SQLContext
val sqlContext = new SQLContext(sc)
//从指定的地址创建RDD
val personRDD = sc.textFile(args(0)).map(_.split(" "))
//通过StructType直接指定每个字段的schema
val schema = StructType(
List(
StructField("id", IntegerType, true),
StructField("name", StringType, true),
StructField("age", IntegerType, true)
)
)
//将RDD映射到rowRDD
val rowRDD = personRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).toInt))
//将schema信息应用到rowRDD上
val personDataFrame = sqlContext.createDataFrame(rowRDD, schema)
//注册表
personDataFrame.registerTempTable("t_person")
//执行SQL
val df = sqlContext.sql("select * from t_person order by age desc limit 4")
//将结果以JSON的方式存储到指定位置
df.write.json(args(1))
//停止Spark Context
sc.stop()
}
}
将程序打成jar包,上传到spark集群,提交Spark任务
/usr/local/spark-1.5.2-bin-hadoop2.6/bin/spark-submit \
--class cn.itcast.spark.sql.InferringSchema \
--master spark://node1.itcast.cn:7077 \
/root/spark-mvn-1.0-SNAPSHOT.jar \
hdfs://node1.itcast.cn:9000/person.txt \
hdfs://node1.itcast.cn:9000/out1
查看结果
hdfs dfs -cat hdfs://node1.itcast.cn:9000/out1/part-r-*
相关文章
- SQL Pretty Printer 格式化sql 利器
- 解决开启SQL Server sql Always on Group 事务日志增大的问题
- SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- sql 截取字符串,并且以*掩码替代
- SQL案例分析-地铁换乘线路查询.sql
- Sql Server中让程序暂停几秒中,再执行后面的命令!(示例)
- 本人收藏的Sql server经典t-sql语句(备忘录,持续更新中)
- SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句及解决方法
- 第四十一章 SQL命令 DROP VIEW
- 第二十一章 SQL命令 CREATE TRIGGER(一)
- 第十五章 使用管理门户SQL接口(一)
- 数仓工具—Hive源码之SQL 解析(6)
- 解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符
- SQL Server-已更新或删除的行值要么不能使该行成为唯一行,要么改变了多个行
- sql jion
- sql server.ios怎么安装
- 在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟
- Flink SQL 如何实现数据流的 Join?
- sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理
- sql server 小技巧(4) Sql server 排序时让空值排在最后
- SQL Server调优系列进阶篇(如何索引调优)
- 基于MS SQL Server的数据库学习安排
- MDF文件在SQL Server数据库中恢复技术
- 小议:部署SharePoint 2013时,无法连接SQL Server问题
- (4.61)sql server执行SQL遇到错误不中断
- 【sql server压测】sql server使用Diskspd测试SQL Server IO存储
- sql server使用T-SQL读取扩展事件
- 【sql server镜像】SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)
- sql语句的优化分析
- sql-常见的SQL优化
- 【SQL Bugs】Caused by: java.sql.SQLSyntaxErrorException: ORA-01789: 查询块具有不正确的结果列数(原因记录)