一起学spark(10) -- spark SQL中的结构化数据之一 : Apache Hive

Apache Hive 是Hadoop 上的一种常见的结构化数据源,Hive 可以在HDFS 内或者其他存储系统上存储多种格式的表,这些格式从普通文本到列式存储格式,应有尽有。Spark SQL可以读取 Hive 支持的任何表。

要把 spark sql 连接到已有的 Hive 上,你需要提供hive 的配置文件,需要将hive-site.xml 文件复制到 Spark 的./conf/目录下,这样做好后,再创建HiveContext对象,也就是 Spark SQL 的入口,然后就可以使用 Hive 查询语言 HQL 对表进行查询,并以由行组成的RDD的形式拿到返回的数据。

from pyspark.sql import HiveContext
hiveCtx = HiveContext(sc)
rows = hiveCtx.sql("select name,age from ...")
firstRow = rows.first()
print firstRow.name

往Hive中插入数据,写入数据表

sql_str = "select ... from ..."
df = hiveCtx.sql(sql_str).repartition(100) #关于分区后面会介绍
sql_insert = "insert overwrite table table1 partition(pdaily = 'xxx') " + sql_str
#方法一,直接执行
hiveCtx.sql(sql_insert) #直接执行sql操作
#方法二,通过 dataframe 
df.write.partitionBy("pdaily").insertInto("table1",True) #最后的参数表示是否 overwrite

Spark 对并行度的调优:
   (1)第一种是在数据混洗时,使用参数的方式为混洗后的RDD指定并行度
   (2)第二种方法是对于任何已有的RDD,通过 repartition(n) 将数据随机打乱并分成设定的分区数目,减少RDD分区可用coalesce(),由于coalesce没有打乱数据,因此比 repartition 更高效。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值