Spark将Dataframe数据写入Hive分区表的方案

2023-11-13

《2021年最新版大数据面试题全面开启更新》

《2021年最新版大数据面试题全面开启更新》

 

DataFrame 将数据写入hive中时,默认的是hive默认数据库,insert into没有指定数据库的参数,数据写入hive表或者hive表分区中:

 

1、将DataFrame数据写入到hive表中

 

从DataFrame类中可以看到与hive表有关的写入API有一下几个:

 
registerTempTable(tableName:String):Unit,	
inserInto(tableName:String):Unit	
insertInto(tableName:String,overwrite:Boolean):Unit	
saveAsTable(tableName:String,source:String,mode:SaveMode,options:Map[String,String]):Unit

有很多重载函数,不一一列举

registerTempTable函数是创建spark临时表

insertInto函数是向表中写入数据,可以看出此函数不能指定数据库和分区等信息,不可以直接写入。

向hive数据仓库写入数据必须指定数据库,hive数据表建立可以在hive上建立,或者使用hiveContext.sql("create table .....")

下面语句是向指定数据库数据表中写入数据:

 
case class Person(name:String,col1:Int,col2:String)	
	
val sc = new org.apache.spark.SparkContext   	
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)	
	
import hiveContext.implicits._	
hiveContext.sql("use DataBaseName")	
val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))	
data.toDF().insertInto("tableName")

 

创建一个case类将RDD中数据类型转为case类类型,然后通过toDF转换DataFrame,调用insertInto函数时,首先指定数据库,使用的是hiveContext.sql("use DataBaseName") 语句,就可以将DataFrame数据写入hive数据表中了。

 

2、将DataFrame数据写入hive指定数据表的分区中

 

hive数据表建立可以在hive上建立,或者使用hiveContext.sql("create table....") ,使用saveAsTable时数据存储格式有限,默认格式为parquet,将数据写入分区的思路是:首先将DataFrame数据写入临时表,之后由hiveContext.sql语句将数据写入hive分区表中,具体操作如下:

 
case class Person(name:String,col1:Int,col2:String)	
	
val sc = new org.apache.spark.SparkContext   	
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)	
	
import hiveContext.implicits._	
hiveContext.sql("use DataBaseName")	
val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))	
data.toDF().registerTempTable("table1")	
hiveContext.sql("insert into table2 partition(date='2015-04-02') select name,col1,col2 from table1")

上面代码是spark版本1.6

 

下面代码是spark版本2.0及以上版本

 
val session = SparkSession.builder().appName("WarehouseInventoryByNewMysqlSnap").enableHiveSupport().getOrCreate()	
val sc: SparkContext=session.sparkContext	
session.sql("use bi_work")	
import session.implicits._	
val data = sc.textFile("path").map(x=>x.split("\\s+")).map(x=>Person(x(0),x(1).toInt,x(2)))	
data.toDF().registerTempTable("table1")	
session.sql("insert into table2 partition(date='2015-04-02') select name,col1,col2 from table1")

这边捎带介绍一下hive创建分区表:

hive分区表:是指在创建表时指定的partition的分区空间,若需要创建有分区的表,需要在create表的时候调用可选参数partitioned by。

注意:

  • 一个表可以拥有一个或者多个分区,每个分区以文件夹的形式单独存在表文件夹的目录下

  • hive的表和列名不区分大小写

  • 分区是以字段的形式在表的结构中存在,通过desc table_name 命令可以查看到字段存在,该字段是分区的标识

  • 建表的语句:

 
CREATE EXTERNAL TABLE bi_work.`dw_inventory_snap`	
(`warehouse_id` string COMMENT '',	
`internal_id` string COMMENT '', 	
`logical_inventory` string COMMENT '', 	
`create_time` timestamp COMMENT '')	
PARTITIONED BY (`snap_time` string) --指定分区	
row format delimited fields terminated by '\t'

 

— THE END —

640?wx_fmt=jpeg

◤半年文章精选系列◥

Flink从入门到放弃之源码解析系列

大数据成神之路-基础篇

大数据成神之路-进阶篇

Flink入门系列

Flink高级进阶

Hadoop生态圈系列

实时计算系列(spark、kafka等)

规范和系统设计

杂谈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark将Dataframe数据写入Hive分区表的方案 的相关文章

  • Excel实现数据的线性回归

    文章目录 一 下载安装Excel 二 使用Excel做线性回归 三 验证回归方程的精度 四 参考资料 一 下载安装Excel 一般购买的电脑都已经安装好了Microsoft Office 就不需要进行下载安装这一过程 百度网盘链接 http
  • 记录一下Object.entries()的用法

    Object entries 方法返回一个给定对象自身可枚举属性的键值对数组 其排列与使用 for in 循环遍历该对象时返回的顺序一致 区别在于 for in 循环还会枚举原型链中的属性 语法 Object entries obj 参数
  • 赛车游戏——【极品飞车】(内含源码inscode在线运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 认
  • MFC ActiveX 接口数据类型,伤不起!

    要不是因为我一直在维护一个曲线绘制控件 www st curve cn 我真的很不想再碰MFC的ActiveX了 其中怎一个乱字了得 回想起来 似乎还是vc6最好 后来我相继升级到了vc2003 2008 2010 每次升级都让我很受伤 注
  • 【机器学习】多分类及多标签分类算法(含源代码)

    目录 多分类及多标签分类算法 一 单标签二分类问题 1 1 单标签二分类算法原理 二 单标签多分类问题 2 1 ovo 2 1 1 手写代码 2 1 2 调用API 2 2 ovr 2 2 1 手写代码 2 2 2 调用API 2 3 Ov
  • 2022年十月份电赛OpenMV巡线方案(2)---主控代码详细分析

    前言 1 继上一篇 2022年十月份电赛OpenMV巡线方案详细代码分析 1 2 这个代码适用于所有主控 只需要更改一下串口接收部分的API 别问我某某MCU能不能跑的这种废话 3 本文使用的协议与正点原子的串口通讯协议一致 看不懂的建议学
  • 当前系统环境打成tar包

    当前系统环境打成tar包 原文地址 https www cnblogs com alexkn p 3879540 html 命令 tar numeric owner exclude proc exclude sys zcvf centos7
  • 【PlayWright教程(一)】安装和使用(python)

    当今常用的三个自动化测试 或者爬虫 库 库 Selenium Puppeteer Playwright JavaScript 支持 官方支持 官方支持 官方支持 Python 异步支持 无 第三方 而且 bug 不少 官方支持 Python
  • 使用bibmap修改bib文件中参考文献的期刊或会议名的字母大小写格式为titlecase

    使用bibmap方便的修改bib文件中参考文献的期刊或会议名的字母大小写格式为titlecase 1 引言 英文语句的字母大小写形式有多种格式 常用的格式是 全大写 upper case 即句子的所有字母都大写 常见于学位论文 报告等的封面
  • system.data.sqlite的源代码下载

    帮助文档 http system data sqlite org index html doc trunk www index wiki 历史版本https system data sqlite org index html doc tru
  • Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click

    Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件 当点击目标DOM元素时触发ViewModel的对应方法 例如 使用Click绑定 1
  • Redis有序集合和定时任务解决订单15分钟关闭

    直接上代码 下单减去库存 public String updatePersonStock PageData pd throws Exception Map
  • IPSec协议

    内容提要 Motivation IP协议的安全缺陷 虚拟专用网 IPSec概述 协议流程 SPD SAD 数据封装 IPSec AH IPSec ESP 安全参数协商 ISAKMP IKE 一 Motivation 1 1IP协议的安全缺陷
  • Google Chrome 扩展程序

    Adblock Plus 扩展网址 https chrome google com webstore detail adblock plus free ad bloc cfhdojbkjhnklbpkdaibdccddilifddb 官网
  • uni-app底部导航栏tabBar监听变化以及变换样式

    一 简介 tabBar有三项 点击后两项变换tabBar的样式 二 案例演示 三 代码 1 首先 监听tabBar 点击切换 放在这三个页面 和onLoad同级 页面生命周期onTabItemTap 监听 TabBar 切换点击 onTab
  • SQL计算复购率

    需求背景 订单表中有每笔订单的下单时间 用户ID 订单金额等信息 需要统计每个月在接下来几个月用户复购情况 create table order info order id int primary key user id int amoun
  • CSS样式表中的基本选择器

    样式表中的选择器 作用 用于选则控件 设置样式 常用的样式选择器 一 基础样式选择器 1 id选择器 用 来选择 ps id是唯一的不允许重复 id的名称 样式 值 给id为指定名称的控件 设置样式 css代码如下
  • SQL:开窗排序,在order by 后加判断条件的作用是什么?

    场景 在生产中 经常会看到窗口函数中对排序字段加 is not null 判断 类似这样的sql代码 select row number over partition by id order by amount 1 is not null
  • Python 学习笔记

    1 函数 2 其他 未完待续 1 函数 append 在列表末尾添加一个元素 list append item count 计算指定元素在列表 字符串或元组中出现的次数 for i in uniqueArr nums append arr
  • Weblogic远程代码执行漏洞 CVE-2023-21839

    漏洞简介 WebLogic Core远程代码执行漏洞 CVE 2023 21839 该漏洞允许未经身份验证的远程攻击者通过T3 IIOP协议进行 JNDI lookup 操作 破坏易受攻击的WebLogic服务器 成功利用此漏洞可能导致Or

随机推荐

  • C语言实验(十四):指针(数组排序,数组求平均数、中位数和众数)

    C语言实验 十四 指针 数组排序 数组求平均数 中位数和众数 一 输入10个整数 利用指针分别由小到大排序 由大到小排序 二 输入10个整数 通过指针引用数组 实现三个函数 分别求这10个整数的平均值 中位数 中值 数组名作为函数参数 通过
  • 人机融合的经验与人类的或机器的经验不同

    一 人机融合的经验与人 机器的经验有所不同 人的经验是通过感知 学习思考等方式积累起来的 是基于我们的感官 情感和意识等特点所形成的 人在与世界交互的过程中 通过观察事物 从错误中学习 与他人交流等方式逐渐积累了大量的经验 人类的经验通常包
  • Ubuntu16.04搭建FTP服务器

    1 vsftpd sudo apt get update sudo apt get install vsftpd 2 检查是否安装成功 vsftpd version 二 修改配置文件 1 修改vsftpd conf文件内容 sudo vim
  • ASCII码详解

    ASCII码表 ASCII码大致可以分作三部分組成 第一部分是 ASCII非打印控制字符 第二部分是 ASCII打印字符 第三部分是 扩展ASCII打印字符 第一部分 ASCII非打印控制字符表 ASCII表上的数字0 31分配给了控制字符
  • 切面更改入参

    定义一个注解 package com huaxia bigdata bi common annotation import com zeekr bigdata bi common constant Constant import com z
  • oracle 9i英文版下载,oracle9i各种版本的下载地址

    Oracle9i Database Release 2 Enterprise Standard Personal Edition for Windows NT 2000 XP http download oracle com otn nt
  • vue3切换路由模式——Hash 、histoary

    1 history模式 使用createWebHistory import createRouter createWebHistory from vue router import Home from views Home vue cons
  • ajax进度条视频缩略图,ajax 异步上传带进度条视频并提取缩略图.pdf

    ajax 异异步步上上传传带带进进度度条条视视频频并并提提取取缩缩略略图图 这篇文章主要介绍了ajax 异步上传带进度条视频并提取缩略图的相关资料 需要的朋友可以参考下 最近在 一个集富媒体功能于一身的项目 需要上传视频 这里我希望 成异步
  • 【Javascript】栈和队列的实现

    Js实现栈和队列 前言 leetcode 232 用栈实现队列 leetcode 225 用队列实现栈 前言 我们知道栈的原理是先进后出 队列的原理是先进先出 在JS中主要通过数组来实现队列和数组的功能 首先我们来看栈 入栈可以用 arr
  • jeecgboot后端java及前端vue无参数获取当前登录用户名等信息

    后端在controller中 注意 必须为带请求的接口 定时任务无法获得此信息 LoginUser loginUser LoginUser SecurityUtils getSubject getPrincipal String userI
  • uni-app搭建Android APP调试环境及兼容处理

    uni app搭建Android APP调试环境及兼容处理 1 回顾 2 利用MUMU模拟器搭建手机模拟器 3 uni API兼容处理方法 参考文献 1 回顾 之前 我在uni app环境搭建的文章中简单写了一下怎么搭建uni app环境并
  • java filereader 用法_第2章 FileReader类使用

    1 1 FileReader读数据一次读取一个字符 1 1 1 案例代码五 package com itheima 02 import java io FileReader import java io IOException 需求 从文件
  • 西瓜书学习笔记第1章(绪论)机器学习

    西瓜书学习笔记第1章 绪论 机器学习 1 1引言 1 2基本术语 1 3假设空间 1 4归纳偏好 1 5发展历程 1 6应用现状 1 1引言 机器学习是这样一门学科 它致力于研究如何通过计算的手段 利用经验来改善系统自身的性能 经验的存在形
  • 为什么RPA机器人会广泛应用于财务管理领域?

    RPA不是一个物理机器人 而是软件机器人 它的优点在于 可以根据规则自动执行任务 并减轻团队执行手动流程的负担 RPA适用于手动的 重复的 错误率高的流程 RPA机器人主要做三件事 降低成本 提高质量 改进操作控制 财务流程充满了搜索 传输
  • 做一个缓存,记录是否进入过此页面

    GuideActivity 如果不是第一次进入主页面 应做一个缓存 记录一下 如果进入过主页面 则下次不经过引导页面直接进入主页面 如果没有进入过主页面 则按正常情况下 先进入引导页面 再进入主页面 CacheUitls putBoolea
  • hadoop和hive、spark、presto、tez是什么关系

    Hadoop是一个分布式计算框架 可以在大数据集上运行分布式应用程序 它由许多组件组成 包括HDFS 分布式文件系统 和MapReduce 分布式计算引擎 Hive是一个基于Hadoop的数据仓库系统 它允许用户使用SQL语言来查询和分析大
  • 【红外DDE算法】HE算法在红外图像可视化上的应用(附源码)

    直方图均衡 HE 在红外图像可视化上的应用 附源码 1 背景需求 制冷型红外相机模拟前端使用较高数据位数进行采样 一般常用 14位 16 位 但是人眼对于灰度的感知 最多能感知 128 个灰阶 并且数据一般是以 8 的整数倍的位宽在电子系统
  • Python制作【大麦网】自动抢票程序

    Python制作 大麦网 自动抢票程序 前言 大麦网 是中国综合类现场娱乐票务营销平台 业务覆盖演唱会 话剧 音乐剧 体育赛事等领域 但是因为票数有限 还有黄牛们不能丢了饭碗 所以导致了 很多人都抢不到票 那么 今天带大家用Python来制
  • 交换机与路由器的基本工作原理

    1 广播域和冲突域 1 1冲突域 连接在同一导线上的所有工作站的集合 或者说是同一物理网段上所有节点的集合或以太网上竞争同一带宽的节点集合 这个域代表了冲突在其中发生并传播的区域 这个区域可以被认为是共享段 在OSI模型中 冲突域被看作是第
  • Spark将Dataframe数据写入Hive分区表的方案

    2021年最新版大数据面试题全面开启更新 2021年最新版大数据面试题全面开启更新 DataFrame 将数据写入hive中时 默认的是hive默认数据库 insert into没有指定数据库的参数 数据写入hive表或者hive表分区中