在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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
python中enumerate的用法实例解析
Aug 18 Python
Python中的rjust()方法使用详解
May 19 Python
Python使用Supervisor来管理进程的方法
May 28 Python
一个基于flask的web应用诞生 记录用户账户登录状态(6)
Apr 11 Python
Python内置函数delattr的具体用法
Nov 23 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
Django中的cookie和session
Aug 27 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
Django实现微信小程序支付的示例代码
Sep 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
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php验证手机号码
2015/11/11 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
python简单猜数游戏实例
2015/07/09 Python
python并发编程之线程实例解析
2017/12/27 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python的继承知识点总结
2018/12/10 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
Python如何定义接口和抽象类
2020/07/28 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
三个Unix的命令面试题
2015/04/12 面试题
全国道德模范事迹
2014/02/01 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
网吧温馨提示
2015/07/17 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js