在python中使用pyspark读写Hive数据操作


Posted in Python onJune 06, 2020

1、读Hive表数据

pyspark读取hive数据非常简单,因为它有专门的接口来读取,完全不需要像hbase那样,需要做很多配置,pyspark提供的操作hive的接口,使得程序可以直接使用SQL语句从hive里面查询需要的数据,代码如下:

from pyspark.sql import HiveContext,SparkSession
 
_SPARK_HOST = "spark://spark-master:7077"
_APP_NAME = "test"
spark_session = SparkSession.builder.master(_SPARK_HOST).appName(_APP_NAME).getOrCreate()
 
hive_context= HiveContext(spark_session )
 
# 生成查询的SQL语句,这个跟hive的查询语句一样,所以也可以加where等条件语句
hive_database = "database1"
hive_table = "test"
hive_read = "select * from {}.{}".format(hive_database, hive_table)
 
# 通过SQL语句在hive中查询的数据直接是dataframe的形式
read_df = hive_context.sql(hive_read)

2 、将数据写入hive表

pyspark写hive表有两种方式:

(1)通过SQL语句生成表

from pyspark.sql import SparkSession, HiveContext
 
_SPARK_HOST = "spark://spark-master:7077"
_APP_NAME = "test"
 
spark = SparkSession.builder.master(_SPARK_HOST).appName(_APP_NAME).getOrCreate()
 
data = [
 (1,"3","145"),
 (1,"4","146"),
 (1,"5","25"),
 (1,"6","26"),
 (2,"32","32"),
 (2,"8","134"),
 (2,"8","134"),
 (2,"9","137")
]
df = spark.createDataFrame(data, ['id', "test_id", 'camera_id'])
 
# method one,default是默认数据库的名字,write_test 是要写到default中数据表的名字
df.registerTempTable('test_hive')
sqlContext.sql("create table default.write_test select * from test_hive")

(2)saveastable的方式

# method two
 
# "overwrite"是重写表的模式,如果表存在,就覆盖掉原始数据,如果不存在就重新生成一张表
# mode("append")是在原有表的基础上进行添加数据
df.write.format("hive").mode("overwrite").saveAsTable('default.write_test')

tips:

spark用上面几种方式读写hive时,需要在提交任务时加上相应的配置,不然会报错:

spark-submit --conf spark.sql.catalogImplementation=hive test.py

补充知识:PySpark基于SHC框架读取HBase数据并转成DataFrame

一、首先需要将HBase目录lib下的jar包以及SHC的jar包复制到所有节点的Spark目录lib下

二、修改spark-defaults.conf 在spark.driver.extraClassPath和spark.executor.extraClassPath把上述jar包所在路径加进去

三、重启集群

四、代码

#/usr/bin/python
#-*- coding:utf-8 ?*-
 
from pyspark import SparkContext
from pyspark.sql import SQLContext,HiveContext,SparkSession
from pyspark.sql.types import Row,StringType,StructField,StringType,IntegerType
from pyspark.sql.dataframe import DataFrame
 
sc = SparkContext(appName="pyspark_hbase")
sql_sc = SQLContext(sc)
 
dep = "org.apache.spark.sql.execution.datasources.hbase"
#定义schema
catalog = """{
       "table":{"namespace":"default", "name":"teacher"},
       "rowkey":"key",
       "columns":{
            "id":{"cf":"rowkey", "col":"key", "type":"string"},
            "name":{"cf":"teacherInfo", "col":"name", "type":"string"},
            "age":{"cf":"teacherInfo", "col":"age", "type":"string"},
            "gender":{"cf":"teacherInfo", "col":"gender","type":"string"},
            "cat":{"cf":"teacherInfo", "col":"cat","type":"string"},
            "tag":{"cf":"teacherInfo", "col":"tag", "type":"string"},
            "level":{"cf":"teacherInfo", "col":"level","type":"string"} }
      }"""
 
df = sql_sc.read.options(catalog = catalog).format(dep).load()
 
print ('***************************************************************')
print ('***************************************************************')
print ('***************************************************************')
df.show()
print ('***************************************************************')
print ('***************************************************************')
print ('***************************************************************')
sc.stop()

五、解释

数据来源参考请本人之前的文章,在此不做赘述

schema定义参考如图:

在python中使用pyspark读写Hive数据操作

六、结果

在python中使用pyspark读写Hive数据操作

以上这篇在python中使用pyspark读写Hive数据操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 文件与目录操作
Dec 24 Python
python调用cmd复制文件代码分享
Dec 27 Python
CentOS中升级Python版本的方法详解
Jul 10 Python
Python中int()函数的用法浅析
Oct 17 Python
我就是这样学习Python中的列表
Jun 02 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
python返回数组的索引实例
Nov 28 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Python之matplotlib绘制饼图
Apr 13 Python
使用Python构造hive insert语句说明
Jun 06 #Python
Python通过kerberos安全认证操作kafka方式
Jun 06 #Python
pandas分批读取大数据集教程
Jun 06 #Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 #Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 #Python
python访问hdfs的操作
Jun 06 #Python
Python API 操作Hadoop hdfs详解
Jun 06 #Python
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
在浏览器中获取当前执行的脚本文件名的代码
2011/07/19 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
JS实现页面打印功能
2017/03/16 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
JS实现的base64加密解密操作示例
2018/04/18 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
python正则表达式之对号入座篇
2018/07/24 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python中return如何写
2020/06/18 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
交通违章检讨书
2014/09/21 职场文书
土地转让协议书
2014/09/27 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
速龙x4-860k处理器相当于i几
2022/04/20 数码科技