在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正则抓取网易新闻的方法示例
Apr 21 Python
Python图片裁剪实例代码(如头像裁剪)
Jun 21 Python
不可错过的十本Python好书
Jul 06 Python
Python找出最小的K个数实例代码
Jan 04 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
python 返回列表中某个值的索引方法
Nov 07 Python
Python 从相对路径下import的方法
Dec 04 Python
django的model操作汇整详解
Jul 26 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
Selenium浏览器自动化如何上传文件
Apr 06 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
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
JQuery小知识
2010/10/15 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
python队列Queue的详解
2019/05/10 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
中专自我鉴定
2014/02/05 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
教师远程培训感言
2014/03/06 职场文书
食品工程专业求职信
2014/06/15 职场文书
图书馆标语
2014/06/19 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python