[2.1]Spark DataFrame操作(一)之读取并过滤json文件
2016-05-25 16:00
711 查看
参考
DT大数据梦工厂spark官网
场景
DataFrame总论IT界数据存储与操作发展的四大阶段
1、代码+文件系统
2、J2EE+DB (存在的问题:数据库不能进行分布式计算)
3、Hive
4、SparkSQL+Hive => SparkSQL+Hive+DataFrame -> SparkSQL+Hive +DataFrame+DataSet(DataSet目前处于实验阶段)
Hive+SparkSQL+DataFrame 黄金组合
1、Hive:负责廉价的数据仓库存储
2、SparkSQL:负责高速的计算
3、DataFrame:负责复杂的数据挖掘
DataFrame基本操作
读取Spark自带的people.json文件,并对其进行一些基本的sql操作,文件原始内容如下:
{"name":"Michael"} {"name":"Andy", "age":30} {"name":"Justin", "age":19}
实验
java版
package cool.pengych.spark.sql; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.DataFrame; import org.apache.spark.sql.SQLContext; public class DataFrameOps { public static void main(String[] args) { /* * 1、创建SQLContext */ SparkConf conf = new SparkConf().setAppName("My Frame Ops").setMaster("local[*]"); JavaSparkContext jsc = new JavaSparkContext(conf); SQLContext sqlc = new SQLContext(jsc); /* * 2、创建DataFrame */ DataFrame df = sqlc.read().json("file:///home/hadoop/spark-1.6.0-bin-hadoop2.6/examples/src/main/resources/people.json"); /* * 3、SQL */ // select * from table df.show(); //desc table df.printSchema(); // select name from table df.select("name").show(); // select name,age+10 from table df.select(df.col("name"),df.col("age").plus(10)).show(); // select * from table where age >10 df.filter(df.col("age").gt(10)).show(); df.groupBy(df.col("age")).count().show(); } }
scala版
package main.scala import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.sql.SQLContext object DataFrameOps { def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local[*]").setAppName("DataFram Ops") val sqlContext = new SQLContext(new SparkContext(conf)) val df = sqlContext.read.json("file:///home/hadoop/spark-1.6.0-bin-hadoop2.6/examples/src/main/resources/people.json") df.show df.printSchema df.select("name").show df.select("name", "age").show df.select(df("name"),df("age")+10).show df.filter(df("age")>10).show } }
执行结果
语句df.filter(df("age")>10).show的执行结果:
16/05/25 22:27:44 INFO DAGScheduler: Job 10 finished: show at DataFrameOps.scala:18, took 0.037776 s +---+------+ |age| name| +---+------+ | 30| Andy| | 19|Justin| +---+------+ 16/05/25 22:27:44 INFO SparkContext: Invoking stop() from shutdown hook
总结
“A DataFrame is a distributed collection of data organized into named columns. It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood”1、DataFrame是基于列的,包含了每条记录的Metadata信息-也就是说DataFrame的优化是基于列内部的优化,而不像RDD一样基于行进行优化。
2、DataFrame从形式上看最大的不同点是其天生是分布式的;你可以简单的认为spark中的DataFrame是一个分布式的Table。
相关文章推荐
- sso跨域写cookie的一段js脚本(推荐)
- 用fasterjson需要注意的地方
- 用fasterjson需要注意的地方
- js 全局变量 局部变量 隐式声明 显式声明,作用域
- 2016年5月25日下午(妙味课堂js预热课程-4笔记一)
- 关于js中"window.location.href"、"location.href"、"parent.location.href"、"top.location.href"的用法
- js之三类(冒泡,插值,二分)排序算法
- jsbin-jsfiddle-or-codepen-which-one-to-use-and-why
- 在js里获取动态的id,形如$("#动态id")
- js脚本加载顺序
- JSP总结(经典)
- jsp/html简单的打印功能实现
- Gson解析或者转换对象成json字符串时,String为NULL转空字符串处理方案
- js 判断键盘事件大全 兼容FireFox和IE(退格、制表、回车、空格、方向键、删除键等)
- JS获取URL参数的函数
- 离开页面前调用Js方法
- js数组去重,合集等操作
- HTML5的自定义属性data-*详细介绍和JS操作实例
- jsx编译器 atom
- JS获取当前时间