spark-sql操作hive和hdfs

情况一:spark-sql直接操作hive
样例数据

head -5 u.user
1|24|M|technician|85711
2|53|F|other|94043
3|23|M|writer|32067
4|24|M|technician|43537
5|33|F|other|15213

hive建表

create table user(
nbr string,
age string,
sex string,
job string,
tex string)
row format delimited 
fields terminated by '|'

hive导数据

LOAD DATA LOCAL INPATH '/home/test/zl/u.user' INTO TABLE user;

spark-sql操作

val a = sqlContext.sql("select * from zl.user")
a.take(5).foreach(println)

情况二:spark-sql读取hdfs上的json数据

val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val jsonFile = sqlContext.jsonFile("/work/a.json")          ---jsonFile是dataframe格式
jsonFile.registerTempTable("people")
val aa = sqlContext.sql("SELECT name FROM people");
aa.foreach(println)

情况三:spark-sql读取hdfs上的txt数据

case class User(nbr:String,age:String,sex:String,job:String,tex:String)         ---注意这里是是大写,是规范格式和定义字段的
val user = sc.textFile("/user/zl/u.user").map(_.split("\\|")).map(p => User(p(0),p(1),p(2),p(3),p(4)))      --注意竖线需要转义
val people = user.toDF()        --people是dataframe格式了,可以使用df的语法

people.columns      --查看表结构
people.take(3)
people.count()      --总记录数
people.filter("sex='M'").count()    --查看性别是男的记录数
people.filter($"sex"!=="M").count()    --查看性别不是男的记录数

people.registerTempTable("people")      --注册临时表
val aa = sqlContext.sql("SELECT name FROM people");
sqlContext.cacheTable("people") 

你可能感兴趣的:(spark,spark)