在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 list语法学习(带例子)
Nov 01 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
Python中encode()方法的使用简介
May 18 Python
Python基础语法(Python基础知识点)
Feb 28 Python
Python实现复杂对象转JSON的方法示例
Jun 22 Python
Python变量赋值的秘密分享
Apr 03 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
快速了解Python开发环境Spyder
Jun 29 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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
thinkphp实现图片上传功能
2016/01/13 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
node.js入门教程
2014/06/01 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JavaScript数据结构与算法之链表
2016/01/29 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
python下载图片实现方法(超简单)
2017/07/21 Python
python编程线性回归代码示例
2017/12/07 Python
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
对python的文件内注释 help注释方法
2018/05/23 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python+OpenCV实现图像拼接
2020/03/05 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python接口自动化框架实战
2020/12/23 Python
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
施工协议书范本
2014/04/22 职场文书
护理专业自荐信范文
2015/03/06 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
教师思想工作总结2015
2015/05/13 职场文书
tensorboard 可视化之localhost:6006不显示的解决方案
2021/05/22 Python
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server