在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实现将绝对URL替换成相对URL的方法
Jun 28 Python
理解python正则表达式
Jan 15 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
python中可以声明变量类型吗
Jun 18 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
Pytorch 中的optimizer使用说明
Mar 03 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
example2.php
2006/10/09 PHP
PHP脚本数据库功能详解(上)
2006/10/09 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
javascript匀速动画和缓冲动画详解
2016/10/20 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
python处理Excel xlrd的简单使用
2017/09/12 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
django rest framework使用django-filter用法
2020/07/15 Python
CSS3 倾斜的网页图片库实例教程
2009/11/14 HTML / CSS
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
酒店执行总经理岗位职责
2013/12/15 职场文书
创业资金计划书
2014/02/06 职场文书
给小学生的新年寄语
2014/04/04 职场文书
儿童生日会策划方案
2014/05/15 职场文书
银行给客户的感谢信
2015/01/23 职场文书
教师旷工检讨书
2015/08/15 职场文书