spark SQL简单的案例

spark SQL简单操作
package hbase

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.spark.sql.{SaveMode, SparkSession}
import org.apache.spark.{SparkConf, SparkContext}

/**
* Created by songmingqi on 2018/9/4
*/
object SparkSQL extends Serializable {

/**
* 创建一个类对象,给他两个属性
* @param key int类型,不限制长度
* @param value string类型,不限制长度
*/
case class Person(key:Int,value:String)

def main(args: Array[String]): Unit = {
/*SparkSession.builder() 创建一个spark SQL的逻辑配置
*getOrCreate() 读取当前项目存不存在逻辑视图,
* 如果存在就get不存在就create,防止代码的二次创建
*/
val conf = SparkSession.builder().appName(“spark sql”).master(“local[2]”).getOrCreate()

/**
  * 在 spark SQL里面建一个DateFrame,$i代表引值,引入变量的值。
  * 因为内部不识别$特殊符号,所以对应的字符串前面加一个S表示说明。
  * 当前字符串可以拿出特殊符号
  */
val df = conf.createDataFrame((1 to 100).map(i => Person(i,s"value:$i")))

//在spark中创建一个叫df的查询视图,可以在SQL中使用Person的视图名称查询df中的数据
df.createTempView("Person")
//conf.sql("select * from Person").collect().foreach(println(_))

val count = conf.sql("select count(*) from Person").collect().head.getLong(0)
//println(s"记录总数:$count")

val rddFromSQL = conf.sql("select key,value from Person where key<10 and key >2")
//rddFromSQL.rdd.map(row =>row).collect().foreach(println(_))

//查询排序
import conf.implicits._
//df.where($"key" >60).orderBy($"value".desc).select($"key").collect().foreach(println(_))

/**
  * parquet如果hdfs是大数据时代的文件系统的事实标准,parquet就是大数据时代数据存储的事实标准
  * 和hbase的存储模式一样,是列式存储。可以对存储的文件序列化
  * 所以压缩了扫描空间,减少扫描表的时间和反序列化的时间
  */

// df.write.mode(SaveMode.Overwrite).parquet(“file:\C:\Users\宋明启\Desktop\modeTest”)
val parquetFile = conf.read.parquet(“file:\C:\Users\宋明启\Desktop\modeTest”)
//parquetFile.where( "key"===60).select( " k e y "=== 60 ) . s e l e c t ( ”key”,$”value”.as(“v”)).collect().foreach(println(_))

parquetFile.createTempView("parquetFile")
conf.sql("select * from parquetFile").collect().foreach(println(_))

}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值