在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采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
5种Python单例模式的实现方式
Jan 14 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
浅谈python jieba分词模块的基本用法
Nov 09 Python
轻松实现TensorFlow微信跳一跳的AI
Jan 05 Python
Python动态导入模块的方法实例分析
Jun 28 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
Python求离散序列导数的示例
Jul 10 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
python中sys模块是做什么用的
Aug 16 Python
python基础之文件操作
Oct 24 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作为Shell脚本语言使用
2006/10/09 PHP
php桌面中心(二) 数据库写入
2007/03/11 PHP
PHP session会话的安全性分析
2011/09/08 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP框架Laravel插件Pagination实现自定义分页
2020/04/22 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jQuery知识点整理
2015/01/30 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
python 实现敏感词过滤的方法
2019/01/21 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
基于python 凸包问题的解决
2020/04/16 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
五水共治捐款倡议书
2014/05/14 职场文书
预备党员入党感言
2015/08/01 职场文书
python脚本框架webpy模板赋值实现
2021/11/20 Python
Nginx限流和黑名单配置
2022/05/20 Servers
Python实现信息管理系统
2022/06/05 Python