在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实现简单购物商城
May 21 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
对python3 urllib包与http包的使用详解
May 10 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
Python和Bash结合在一起的方法
Nov 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
在php中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
javascript function、指针及内置对象
2009/02/19 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
JSONP基础知识详解
2017/03/19 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
模块化react-router配置方法详解
2019/06/03 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
Python深入学习之对象的属性
2014/08/31 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
pycharm 安装JPype的教程
2019/08/08 Python
python实现拼图小游戏
2020/02/22 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
什么是servlet链?
2014/07/13 面试题
信息技术培训感言
2014/03/06 职场文书
停车位租赁协议书
2014/09/24 职场文书
民主生活会剖析材料
2014/09/30 职场文书
食品安全主题班会
2015/08/13 职场文书
外出培训学习心得体会
2016/01/18 职场文书