SparkSQL学习记录(SparkSQL 两种Schema创建方式)
2018-05-22 17:24
393 查看
方式://l通过定义Case Class,使用反射推断Schema(case class方式)
方式一:
//2 通过可编程接口,定义Schema,并应用到RDD上(createDataFrame 方式)
依赖:
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.10</artifactId> <version>1.6.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.10</artifactId> <version>1.6.1</version> </dependency>
方式一:
import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.sql.SQLContext //l通过定义Case Class,使用反射推断Schema(case class方式) case class Person(name: String, age: Int) object SparkSqlDemo1 { def main(args: Array[String]) { val conf = new SparkConf().setAppName("sparksqldemo1").setMaster("local") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) val rddpeople = sc.textFile("test.txt").map(_.split(" ")).map(p => Person(p(0), p(1).trim().toInt)) //隐式转换 // this is used to implicitly convert an RDD to a DataFrame. import sqlContext.implicits._ val df = rddpeople.toDF() df.registerTempTable("people") //缓存和清除缓存表 //sqlContext.cacheTable("people") //sqlContext.uncacheTable("people") //sqlContext.sql("CACHE TABLE people") //sqlContext.sql("UNCACHE TABLE people") val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 10 and age <= 19") //DSL(Domain Specific Language) //在DSL中,使用Scala符号'+标示符表示基础表中的列,Spark的execution engine会将这些标示符隐式转换成表达式 //另外可以在API中找到很多DSL相关的方法,如where()、select()、limit()等等,详细资料可以查看Catalyst模块中的DSL子模块 // val teenagers = df.where('age >= 10).select('name) teenagers.map(t => "Name: " + t(0)).collect().foreach(println) sc.stop() } }
方式二:
阅读更多import org.apache.spark.sql.SQLContext import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org.apache.spark.sql.types.StructType import org.apache.spark.sql.types.StructField import org.apache.spark.sql.types.StringType import org.apache.spark.sql.Row //通过可编程接口,定义Schema,并应用到RDD上(createDataFrame 方式) object SparkSqlDemo2 { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("sparksqldemo2").setMaster("local") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) val schemaString = "name age" val schema = StructType( schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true))) val rowRDD = sc.textFile("test.txt").map(_.split(" ")).map(p => Row(p(0), p(1).trim)) val peopleDF = sqlContext.createDataFrame(rowRDD, schema) peopleDF.registerTempTable("people") sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19") .map(t => "Name: " + t(0)).collect().foreach(println) } }
相关文章推荐
- SparkSQL中的DataFrame的两种创建方式。
- spark sql 学习中的几点记录
- SparkSQL学习记录之三
- Java接入Spark之创建RDD的两种方式和操作RDD
- spark sql 学习中的几点记录
- SparkSQL 实现UDF的两种方式
- Docker学习(2):Docker镜像介绍和容器的两种创建方式
- sparkSQL学习记录DATAFrame操作
- SparkSQL UDF 两种方式:udf() 和 register()
- spark sql 学习中的几点记录
- spark sql 学习中的几点记录
- Intellij 创建spark项目的两种方式
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- spark sql 学习中的几点记录
- SQL学习记录2 创建和使用数据库(weiwancheng)
- SQL学习之使用命令方式创建、删除与修改关系表
- Discuz学习记录:取得所有记录数量的两种方式
- spark sql 学习中的几点记录
- 0324的学习笔记----里面最重要的就是一个tom猫的动画,和涉及到的内存问题(创建imageview的两种方式,imagenamed就会形成缓存,占用很多内
- spark sql 学习中的几点记录