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(_))
}
}