spark sql 基本用法
一、通过结构化数据创建DataFrame:
publicstaticvoid main(String[] args) {
SparkConf conf = new SparkConf() .setAppName("DataFrameCreate").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc);
DataFrame df = sqlContext.read().json("hdfs://spark1:9000/students.json"); //结构化数据直接加载为DataFrame
df.show();
}
二、通过RDD创建DataFrame的两种创建方式
(数据源students.txt的数据截图)
2.1通过已知类型的schema创建DataFrame,代码如下:
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setMaster("local")
.setAppName("RDD2DataFrameReflection");
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc); JavaRDD<String> lines = sc.textFile("D://students.txt");
//将lines转换成 JavaRDD<Student>
JavaRDD<Student> students = lines.map(new Function<String, Student>() { private static final long serialVersionUID = 1L; @Override
public Student call(String line) throws Exception {
// TODO Auto-generated method stub
String[] strPlits = line.split(",");
Student stu = new Student();
stu.setId(Integer.valueOf(strPlits[]));
stu.setName(strPlits[]);
stu.setAge(Integer.valueOf(strPlits[]));
return stu;
}
});
// 使用反射方式,将RDD转换为DataFrame
// 这里要求,JavaBean必须实现Serializable接口,是可序列化的 //根据student的schema 和 RDD创建DataFrame
DataFrame studentsDF = sqlContext.createDataFrame(students, Student.class);
studentsDF.show();
}
2.2手动创建schema的方式创建DataFrame
public static void main(String[] args) {
//... 省略创建sqlContext的过程
JavaRDD<String> lines = sc.textFile("D://students.txt");
//将普通RDD装换成JavaRDD<Row>
JavaRDD<Row> rowRDD = lines.map(new Function<String, Row>() { private static final long serialVersionUID = 1L; @Override
public Row call(String line) throws Exception {
String[] strArray = line.split(",");
Row row= RowFactory.create(
Integer.valueOf(strArray[]), //id
strArray[], //name
Integer.valueOf(strArray[])); //age
return row;
}
});
//第二步 创建元类型, 即创建schema
List<StructField> structFields = new ArrayList<StructField>();
structFields.add(DataTypes.createStructField("id", DataTypes.IntegerType, true));
structFields.add(DataTypes.createStructField("name", DataTypes.StringType, true));
structFields.add(DataTypes.createStructField("age", DataTypes.IntegerType, true));
StructType structType = DataTypes.createStructType(structFields); //根据元数据类型将JavaRDD<Row>转化成DataFrame
DataFrame studentDF = sqlCotnext.createDataFrame(rowRDD, structType); studentDF.show();
}
-》DataFrame、RDD、List互转
JavaRDD<Row> rows = studentDF.javaRDD();List<Row> studentList = rows.collect();
三、DataFrame基本用法
// 打印DataFrame中所有的数据(select * from ...) df.show();
// 打印DataFrame的元数据(Schema)
df.printSchema();
// 查询某列所有的数据
df.select("name").show();
// 查询某几列所有的数据,并对列进行计算
df.select(df.col("name"), df.col("age").plus()).show();
// 根据某一列的值进行过滤
df.filter(df.col("age").gt()).show();
// 根据某一列进行分组,然后进行聚合
df.groupBy(df.col("age")).count().show();
DataFrame studentDF = sqlCotnext.createDataFrame(rowRDD, structType);
studentDF.show(); studentDF.registerTempTable("students"); //将DataFrame注册为零时表,取名students
//对students零时表做sql查询
DataFrame oldStudentDF = sqlCotnext.sql("select * from students where age>18");
oldStudentDF.show();
spark sql 基本用法的更多相关文章
- Spark SQL入门用法与原理分析
Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...
- Spark SQL基本概念与基本用法
1. Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了两个编程抽象分别叫做DataFrame和DataSet,它们用于作为 ...
- Spark SQL中列转行(UNPIVOT)的两种方法
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
- Spark SQL历险记
现在的spark sql编程通常使用scala api 以及 java api的方式,相比于直接使用 spark sql语句,spark api灵活很多,毕竟可以基于dataset以及rdd两种方式进 ...
- 【慕课网实战】七、以慕课网日志分析为例 进入大数据 Spark SQL 的世界
用户: 方便快速从不同的数据源(json.parquet.rdbms),经过混合处理(json join parquet), 再将处理结果以特定的格式(json.parquet)写回到 ...
- Spark SQL 函数全集
org.apache.spark.sql.functions是一个Object,提供了约两百多个函数. 大部分函数与Hive的差不多. 除UDF函数,均可在spark-sql中直接使用. 经过impo ...
- org.apache.spark.sql.functions汇总
测试数据: id,name,age,comment,date 1,lyy,28,"aaa bbb",20180102020325 scala> var data = spar ...
- DataFrame编程模型初谈与Spark SQL
Spark SQL在Spark内核基础上提供了对结构化数据的处理,在Spark1.3版本中,Spark SQL不仅可以作为分布式的SQL查询引擎,还引入了新的DataFrame编程模型. 在Spark ...
- 理解Spark SQL(二)—— SQLContext和HiveContext
使用Spark SQL,除了使用之前介绍的方法,实际上还可以使用SQLContext或者HiveContext通过编程的方式实现.前者支持SQL语法解析器(SQL-92语法),后者支持SQL语法解析器 ...
随机推荐
- python生成器之斐波切纳数列
面试的时候遇到过这样的一个题目: 斐波切纳数列1,2,3,5,8,13,21.........根据这样的规律,编程求出400万以内最大的斐波切纳数,并求出是第几个斐波切纳数. 方法一: 方法二:这个方 ...
- CV_EXPORTS定义及作用
CV_EXPORTS 常用如下: class CV_EXPORTS MatExpr; template<typename _Tp> class CV_EXPORTS Size_; CV_E ...
- JSP内置对象----response
response 对象 当客户访问一个服务器的页面时,会提交一个HTTP 请求,服务器收到请求时,返回HTTP 响应.request 对象获取客户请求提交的信息, 与request对象相对应的对 ...
- Tomcat+redis+nginx配置
为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架.相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇 ...
- AnyEvent::HTTP 实现异步请求
异步http: jrhmpt01:/root/async# cat a1.pl use LWP::UserAgent; use utf8; use DBI; use POSIX; use HTTP:: ...
- 开源流媒体处理库live555服务器端、客户端源代码分析总结
RTSP服务器端流程: 1. RTSP连接的建立过程 RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话. 首先创 ...
- 10003 Cutting Sticks(区间dp)
Cutting Sticks You have to cut a wood stick into pieces. The most affordable company, The Analog ...
- android service和activity的通讯
我们须要用下面方式来启动service: </pre><pre name="code" class="java"><span st ...
- ExtJs 4 的filefield上传后 返回值success接受不正常
问题解决了,我修改了返回类型为setContentType("text/html")可以正确解析了,感到很奇怪,其他的地方使用setContentType("applic ...
- 通知/代理/block 三者比对
通知 : “一对多”,”多对一” 传值 四个步骤: 1.发送通知2.创建监听者3.接收通知4.移除监听者 使用场景:1- 很多控制器都需要知道一个事件,应该用通知:2 - 相隔多层的两个控制器之 ...