在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翻译软件实现代码(使用google api完成)
Nov 26 Python
Python中的多重装饰器
Apr 11 Python
python机器学习之KNN分类算法
Aug 29 Python
Python/ArcPy遍历指定目录中的MDB文件方法
Oct 27 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
基于FME使用Python过程图解
May 13 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
如何更换python默认编辑器的背景色
Aug 10 Python
python rsa-oaep加密的示例代码
Sep 23 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
PHP备份/还原MySQL数据库的代码
2011/01/06 PHP
php HandlerSocket的使用
2011/05/02 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
js实现无限级树形导航列表效果代码
2015/09/23 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
python实现随机漫步方法和原理
2019/06/10 Python
基于python的Paxos算法实现
2019/07/03 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
给国外客户的邀请函
2014/01/30 职场文书
一分钟演讲稿
2014/04/30 职场文书
环保口号大全
2014/06/12 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
最新最全的手机号验证正则表达式
2022/02/24 Javascript