spark-sql(不包含hive-sql)查询编程
来源:互联网 发布:淘宝女装韩版羽绒服 编辑:程序博客网 时间:2024/06/08 06:23
spark-sql(不包含hive-sql)查询编程
//1:将json格式的数据转化为dataFrame
val df =sqlContext.read.json("hdfs://localhost:9000/jacksoom/people.json")//读取json格式的数据,转化为dataFramedf.show()//显示dataFrame内容df.printSchema()//显示表字段格式df.select("name").show()//查找name的行,显示df.select(df("name"), df("age") + 1).show()//查找name和age字段,并将age字段+1处理,然后显示df.filter(df("age") > 21).show()//过滤age>21的字段,并显示df.groupBy("age").count().show()//对age字段调用groupBy函数,返回年龄和该年龄用户个数
//2:RDD直接转化方法dataFrame
case class Person(name: String, age: Int)//创建Person类val people = sc.textFile("hdfs://localhost:9000/jacksoom/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()//先读取文件为RDD,然后制定分隔符,转化为RDD[Person]格式,然后使用toDF()转化为dataFramepeople.registerTempTable("people")//将该dataFrame注册表名为“people”的表val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")//使用sql语言查询teenagers.map(t => "Name: " + t(0)).collect().foreach(println)//输出13=<age<=19的nameteenagers.map(t => "Name: " + t.getAs[String]("name")).collect().foreach(println)//简单的sql查询输出teenagers.map(_.getValuesMap[Any](List("name", "age"))).collect().foreach(println)//sql查询
//当转化为表的数据个格式不能提前确定的情况,可以由下面三个步骤创建dataFrame
import org.apache.spark.sql.Row;import org.apache.spark.sql.types.{StructType,StructField,StringType};//依赖jarval people = sc.textFile("hdfs://localhost:9000/jacksoom/people.txt")//step1:创建RDDval schemaString = "name age"//定义字段字符串val schema =StructType(schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))//step2:定义表格式val rowRDD = people.map(_.split(",")).map(p => Row(p(0), p(1).trim))//val peopleDataFrame = sqlContext.createDataFrame(rowRDD, schema)//step3:根据表格式和行RDD,创建dataFramepeopleDataFrame.registerTempTable("people")//注册表val results = sqlContext.sql("SELECT name FROM people")//简单使用spl查询results.map(t => "Name: " + t(0)).collect().foreach(println)//对查询结果进行输出
//通用的加载/保存功能,在最简单的形式中,默认的数据源(parquet文件非spark.sql.sources.default需要另外配置),将用于所有操作
val df = sqlContext.read.load("hdfs://localhost:9000/jacksoom/users.parquet")//载入parquet文件,返回为dataFrame格式df.select("name", "favorite_color").write.save("hdfs://localhost:9000/jacksoom/namesAndFavColors.parquet")//然后使用查询,并将查询结果保存为相应的parquet文件
//手动指定选项,
//可以手动指定你想使用的数据源,dataSources需要使用完全限定域名(即org.apache.spark.sql.parquet)规定,但是如果是内置的来源,你也可以使用短名称(eg:josn,parquet,jdbc)。使用此语法,任何类型的数据帧可被转换成其他类型
val df = sqlContext.read.format("json").load("hdfs://localhost:9000/jacksoom/people.json")//指定读入的为jsondf.select("name", "age").write.format("parquet").save("namesAndAges.parquet")//sql查找,然后指定保存格式为parquet
//装载数据
case class Person(name: String, age: Int)//创建Person类val people = sc.textFile("hdfs://localhost:9000/jacksoom/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()people.toDF().write.parquet("hdfs://localhost:9000/jacksoom/test2people.parquet")//将数据写入test2people.parquetval df = sqlContext.sql("SELECT name FROM parquet.`hdfs://localhost:9000/jacksoom/users.parquet`")//直接通过路径查询(spark1.6才可以)
//模式合并
//将两个表合并,以及合并两表相应的模式,由于这种操作消耗较大,所以在spark1.5之后的版本默认的将这种功能进行关闭,不过你也可以向下面的例子一样手动设置为为true,或设置全局SQL选项**spark.sql.parquet.mergeSchema为true。
import sqlContext.implicits._val df1 = sc.makeRDD(1 to 5).map(i => (i, i * 2)).toDF("single", "double")df1.write.parquet("data/test_table/key=1")val df2 = sc.makeRDD(6 to 10).map(i => (i, i * 3)).toDF("single", "triple")df2.write.parquet("data/test_table/key=2")//合并这两个表,首先需要将默认关闭的‘mergeSchema’设置为trueval df3 = sqlContext.read.option("mergeSchema", "true").parquet("data/test_table")
0 0
- spark-sql(不包含hive-sql)查询编程
- Spark-编程执行Spark SQL查询
- sql查询不包含的列
- Spark SQL with Hive
- Spark SQL+Hive历险记
- spark sql on hive
- spark-sql读取hive
- spark-sql 结合 hive
- spark sql with hive
- Spark Hive SQL实例
- Spark SQL Hive Tables
- spark-sql 不兼容的hive语法列表
- spark-sql 集合hive查询数据执行日志
- Spark SQL & Spark Hive编程开发, 并和Hive执行效率对比
- spark sql on hive初探
- Spark SQL on Hive配置
- spark sql与hive整合
- Spark SQL访问Hive,MySQL
- git 常用操作指令
- python连接数据库,tushare,Dataframe to sql
- 屏幕适配 简单懂
- 坎记
- Stanford公开课--神经网络的表示
- spark-sql(不包含hive-sql)查询编程
- 实验二 Button 事件处理
- MySQL 源码安装
- 安装PostGIS(Linux篇)
- PHP 在接收POST大数据(大数组或大字符串)时出现500错误
- 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
- 百分比布局 (翻译,体验)解决布局问题,又一种体验
- 2016年度 JavaScript 展望(上)
- HDU 1106 排序