hive 高级操作

1.查看数据库,表格

spark.sql('show databases').show()

spark.sql('use school')

spark.sql('show tables').show()

2.查询

spark.sql('select * from tb_student2').show()

3.应用实例

from pyspark.sql.types import *
datas=[
 '9,test1,男,12',
 '10,test2,男,16',
 '11,test1,女,15',
]


rdd=sc.parallelize(datas)#生成rdd
rdd=rdd.map(lambda x:x.split(','))#拆分,生成元组形式
rdd=rdd.map(lambda x:[int(x[0]),x[1],x[2],int(x[3])])#生成列表形式
print(rdd.collect())
#生成字段名
sch=StructType([StructField('id',IntegerType(),True),StructField('name',StringType(),True),StructField('sex',StringType(),True),StructField('age',IntegerType(),True)])
df=spark.createDataFrame(rdd,sch)#生成dataframe
#创建临时表
df.createOrReplaceTempView('tmpV')
spark.sql('select * from tmpV').show()
#将临时表导入
spark.sql('insert into table tb_student2 partition(parsex=3) select * from tmpV')
spark.sql('select * from tb_student2').show()
#将姓名和年龄放入到新表中
spark.sql('create table student11 as select name,age from tb_student2')

spark.sql('select * from student11').show()

5.查看表结构

spark.sql('desc formatted tb_student2').show()#查看表结构

6.聚合函数

spark.sql('select sex,count(age),sum(age),avg(age),max(age),min(age) from tb_student2 group by sex').show()

7.导入函数

from pyspark.sql import functions as F
df=spark.sql('select * from tb_student2 where sex="男"')
df.show()
df.select(df.age).distinct().show()#导入函数,调用,去除重复

df.agg(F.max(df.age)).show()#取最大

8.自定义函数注册调用

#在每个年龄后面加岁字
from pyspark.sql import functions as F
from pyspark.sql.types import *
df=spark.sql("select *,concat(age,'岁') as sui from tb_student2 where sex='男'")#连接
df.show()
def busui(age):#自定义函数
    return str(age)+'岁'
scx=sqlContext
scx.registerFunction('bu',busui)#以bu名字注册函数
#注册函数一
df=spark.sql("select *,bu(age) as bu from tb_student2 where sex='男'")#调用函数
df.show()
#注册函数二
bu=F.udf(busui,StringType())#注册函数,bu
df=df.withColumn('aa',bu(df.age))#调用函数

df.show()

9.


你可能感兴趣的:(hive 高级操作)