spark优化之分区插入

Spark——Spark覆盖分区表中指定的分区 文章目录项目场景问题描述解决方案参考 项目场景 我们现在有这样一个表,需要按月来记录用户的状态,当前月的状态数据是每天都要更新的,历史月的状态数据导入到表之后就不再更新了。 那么这个业务场景就转换成了“如何向一个已存在的分区表写入并覆盖当前月份的状态数据,而又保留历史月份数据”的问题。 问题描述 Spark中向分区表写数据的时候,如果写入模式为“overwrite”,那会将整个表覆盖掉;如果写入模式为“append”,那么我们当前一个月的数据每天都会追加到当前月的分区内,那就会造成数据重复。所以不能直接使用 阅读详情
spark.sql.sources.partitionOverwriteModeSTATIC

When INSERT OVERWRITE a partitioned data source table, we currently support 2 modes: static and dynamic. In static mode, Spark deletes all the partitions that match the partition specification(e.g. PARTITION(a=1,b)) in the INSERT statement, before overwriting. In dynamic mode, Spark doesn't delete partitions ahead, and only overwrite those partitions that have data written into it at runtime. By default we use static mode to keep the same behavior of Spark prior to 2.3. Note that this config doesn't affect Hive serde tables, as they are always overwritten with dynamic mode. This can also be set as an output option for a data source using key partitionOverwriteMode (which takes precedence over this setting), e.g. dataframe.write.option("partitionOverwriteMode", "dynamic").save(path).

2.3.0
// 覆盖指定分区
table("tv_group").write.option("partitionOverwriteMode", "dynamic").partitionBy("store_id", "group_id").
      mode(SaveMode.Overwrite).save("xxx")

// 删除所有分区再插入
table("tv_group").write.option("partitionOverwriteMode", "STATIC").partitionBy("store_id", "group_id").
      mode(SaveMode.Overwrite).save("xx")

Save Spark dataframe as dynamic partitioned table in Hive

I have a sample application working to read from csv files into a dataframe. The dataframe can be stored to a Hive table in parquet format using the method df.saveAsTable(tablename,mode).

The above code works fine, but I have so much data for each day that i want to dynamic partition the hive table based on the creationdate(column in the table).

is there any way to dynamic partition the dataframe and store it to hive warehouse. Want to refrain from Hard-coding the insert statement using hivesqlcontext.sql(insert into table partittioin by(date)....).

Question can be considered as an extension to :How to load DataFrame directly to Hive in Spark

any help is much appreciated.

------------------------

I believe it works something like this:

df is a dataframe with year, month and other columns

df.write.partitionBy('year', 'month').saveAsTable(...)

or

df.write.partitionBy('year', 'month').insertInto(...)

Tried this Partitionby method. It only works on RDD level, once dataframe is created most of the methods are DBMS styled e.g. groupby, orderby but they don't serve the purpose of writing in different partitions folders on Hive. 

Ok, so was able to work it out with 1.4 version. df.write().mode(SaveMode.Append).partitionBy("date").saveAsT‌​able("Tablename"); . This however changes my date field to integer value and remove the actual date. e.g. there are 9 unique dates in the column but they are now stored as 1,2,3.... and folder name is date=1,2,3,... instead of date=20141121. Let me know if there is a way to do this

------------------

I was able to write to partitioned hive table using df.write().mode(SaveMode.Append).partitionBy("colname").saveAsTable("Table")

I had to enable the following properties to make it work.

hiveContext.setConf("hive.exec.dynamic.partition", "true") hiveContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")

Where should i set the above 2 parameters ? I tried logging in hive shell and run above commands, it failed. i am sure i am doing it wrong. Could you please tell where can i set these properties ?

@VrushankDoshi You would set it in the spark program, right after you create your hiveContext. val sparkConf = new SparkConf() val sc = new SparkContext(sparkConf) val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) hiveContext.setConf("hive.exec.dynamic.partition","true") hiveContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")

--------------

I was able to write to partitioned hive table using df.write().mode(SaveMode.Append).partitionBy("colname").saveAsTable("Table")

I had to enable the following properties to make it work.

hiveContext.setConf("hive.exec.dynamic.partition", "true")
hiveContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")

------------

I believe it works something like this:

df is a dataframe with year, month and other columns

df.write.partitionBy('year', 'month').saveAsTable(...)

or

df.write.partitionBy('year', 'month').insertInto(...)

----------------------

$SPARK_HOME/bin/spark-submit --files $SPARK_HOME/conf/hive-site.xml --num-executors 2 --executor-memory 1g --executor-cores 1 --class com.bl.bigdata.cdp.execservice.service.batch.TestApp --name TestApp_wsw /var/lib/hive/ww/TestApp.jar

spark sql重分区 阅读详情

相关推荐

spark学习笔记3(使用spark Sql进行离线数据分析项目数据的可视化、yarn运行、优化)

八、数据可视化 1. Echarts (百度)的使用 2. 前面统计的结果存放在 Mysql 中,需要使用 Echarts展示出来 3. 使用 Echarts (详见百度官网) (1) 从官网下载 echarts.min.js (2) 在 html 的头部引入echarts.min.js (3) 在官网复制需要的图形的脚本文件并进行相应的修改 4.使用 idea 创建 web 项...

wangping623的专栏 1480

spark overwrite分区覆盖导致全表覆盖问题

比如我们目前有两个分区 2019-03-22 和 2019-03-23 两个分区,现在我们使用 saveAsTable 想覆盖其中一天的分区,结果却是将整个所有分区遮盖了。重建了整个目录,这明显不是我们想要的到的结果。 试过下图还是不行 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=no...

q954103的博客 7556

Spark 覆盖写Hive分区表,只覆盖部分对应分区

我的原创地址:https://dongkelun.com/2020/01/16/sparkHivePartitionOverwrite/ 前言 总结Spark覆盖写Hive分区表,如何只覆盖部分对应分区 版本 要求Spark版本2.3以上,亲测2.2无效 配置 config("spark.sql.sources.partitionOverwriteMode","dynamic") 注意 1、saveAsTable方法无效,会全表覆盖写,需要用insertInto,详情见代码 2、insertInto需要主

主要分享大数据相关的知识,如Spark、Hudi 3212

Spark如何正确的写hive分区表

经常听到有人讲:spark写hive 分区表时,原本想覆盖一个分区的数据,但因为错误的编码导致整个表的分区被覆盖。本文针对此问题进行测试。 1. 测试结论 需要指定如下参数:"spark.sql.sources.partitionOverwriteMode", "dynamic" "hive.exec.dynamic.partition.mode", "nonstrict" saveAsTable方法会导致全表覆盖写,需要用insert into,详情下面的源代码 insert.

penriver的博客 1万+

Spark on Hive动态分区表的应用

运行Spark的时候,同时跑多个任务对同一张表(parquet格式),同时写多个Hive分区,需要加一下参数set("spark.sql.hive.convertMetastoreParquet","false");这样的话,所使用的spark临时目录就是独立(静态分区默认共用一个临时目录),不会冲突。 如果是orc格式,里面的关键字改成Orc就行。

数据与算法架构提升之路专栏 2123

Spark Sql 连接mysql

转载请务必注明原创地址为:http://dongkelun.com/2018/03/21/sparkMysql/ 1、基本概念和用法(摘自spark官方文档中文版) Spark SQL 还有一个能够使用 JDBC 从其他数据库读取数据的数据源。当使用 JDBC 访问其它数据库时,应该首选 JdbcRDD。这是因为结果是以数据框(DataFrame)返回的,且这样 Spark SQL操作轻松或便......

主要分享大数据相关的知识,如Spark、Hudi 1万+

Spark SQL 中的动态分区插入和动态分区修剪是如何实现的?

Spark SQL中的动态分区插入和动态分区修剪是两个关键性能优化技术。动态分区插入通过自动创建分区目录并按分区并行写入数据,适用于日志、电商订单等场景。动态分区修剪则在查询时自动过滤无关分区,显著减少IO扫描。优化技巧包括:合理配置参数、确保统计信息准确、避免复杂表达式阻碍DPR。实际应用中需注意小文件合并、分区键选择等问题,并通过执行计划验证优化效果。这两个特性配合使用可大幅提升大数据处理效率。

weixin_45422672的博客 588

大数据Spark(二十):Spark Core外部数据源引入

日志数据:电商网站的商家操作日志订单数据:保险行业订单数据网站基本分析(pv、uv。。。。。注意:实际开发中会封装为工具类直接使用实际开发中常常将分析结果RDD保存至MySQL表中,使用foreachPartition函数;此外Spark中提供JdbcRDD用于从MySQL表中读取数据。调用RDD#foreachPartition函数将每个分区数据保存至MySQL表中,保存时考虑降低RDD分区数目和批量插入,提升程序性能。

Lansonli(蓝深李)的博客 1521

在 Spark SQL 中,如何通过动态分区插入提高性能?

摘要:Spark SQL动态分区插入技术通过自动管理分区显著提升数据写入性能。本文详细介绍了其实现方法,包括基础配置、语法示例和与传统方式的性能对比,动态分区可实现3-10倍的性能提升。重点讲解了优化策略:数据预处理(空值检查、分区统计)、高级配置(并行度、文件控制)和批量插入技术。最后提供了执行计划分析和性能监控方法,帮助开发者有效诊断和优化动态分区操作。这些技术可大幅降低维护成本,提高大规模数据处理的效率。

weixin_45422672的博客 891

同步辐射材料科学应用指南:从XAFS原位实验到数据处理

材料结构分析是材料研究的核心环节,但传统实验室X射线受限于能量固定、亮度不足,往往难以回答原子局域配位、非晶结构及动态演变等关键问题。同步辐射光源以高通量、连续可调、偏振可控及脉冲时间结构等特性,将材料表征从静态观察推进到原位动态追踪层次。基于X射线吸收精细结构谱(XAFS)、原位实验、X射线衍射与散射、微区成像等技术,研究人员可实现元素选择性分析、近邻原子环境解析及真实工况下的结构演变监测。本文从技术原理出发,覆盖实验方案设计、样品制备、现场对光、数据处理与常见故障排查,并结合典型应用场景,为材料科学领域

weixin_32612263的博客 163

Halcon相机标定实战:从参数设置到精度优化全解析

本文详细解析Halcon相机标定的全流程,从基础概念到实战技巧,涵盖参数设置、精度优化及常见问题解决方案。通过实际案例和代码示例,帮助读者掌握工业视觉项目中相机标定的关键技术,提升测量精度和系统稳定性。

weixin_29279153的博客 320

Spark SQL DML语句

DML(Data Manipulation Language,数据操作语言)操作主要用来对数据进行插入、更新和删除操作。本节主要介绍Spark SQL中的DML操作。Spark SQL提供了一个命令行工具,可以让用户直接通过命令行运行SQL查询。Spark SQL可以兼容Hive,以便Spark SQL支持Hive表访问、UDF(用户自定义函数)以及Hive查询语言(HiveQL/HQL)。

夏天又到了的专栏 1333

lammps后处理:堆垛层错和孪晶的数量统计

python调用ovito包可以免费实现ovito pro版本的功能,不需要安装ovito pro软件,如统计位错线长度、CNA结构、键角分布等,如需深入学习,可考虑报名python ovito后处理课程,或lammps一对一课程。lammps金属变形模拟中,可能会产生堆垛层错或者孪晶等结构,但是ovito免费版本无法统计这些结构的数量。使用python和ovito软件包,则可以方便的统计出这些结构的数量。大家好,我是小马老师。

lammps_jiayou的博客 464

如何在 Spark SQL 中进行数据的分区操作?分区对性能的影响是什么?

Spark SQL数据分区操作及性能影响摘要(148字): Spark SQL支持通过PARTITIONED BY创建分区表,实现动态分区插入和管理。分区可显著提升查询性能(分区剪枝减少I/O)、优化并行处理,但过度分区会导致小文件问题和内存压力。最佳实践包括:选择合理分区策略(如时间维度)、优化分区大小、配置相关参数。分区适用于大数据量场景(如时间序列),应避免高基数字段分区和小数据量情况。合理设计分区是Spark SQL性能优化的关键,需平衡查询效率与资源消耗。

weixin_45422672的博客 804

基于TENG的呼吸测量与识别系统:从蓝牙到WiFi的改造与上位机实现

本文介绍了一种基于摩擦纳米发电机(TENG)的呼吸测量系统改造方案,将原有蓝牙通信升级为WiFi传输。系统通过TENG传感器采集呼吸信号,STM32微控制器处理数据后,经ESP8266 WiFi模块发送至上位机。文中详细阐述了硬件改造(四通道改单通道、蓝牙换WiFi)、嵌入式软件修改(包括ESP8266驱动、数据采集与TCP通信实现)以及上位机软件设计。改造后的系统提升了传输距离和稳定性,为可穿戴健康监测提供了更优解决方案。

huanghm88的专栏 110

YOLOv13优化:PoolingFormerCGLU模块 MetaFormer 框架 + 池化混合器 手把手教你自注意力

PoolingFormer1 是一个基于 MetaFormer 框架 的轻量化卷积-Transformer 混合模块,通过 Pooling 取代自注意力,实现: 更低的计算成本 一定的全局信息融合 兼容 CNN 和 Transformer 的优点

FJN110的博客 425

Spark SQL Shuffle 分区数生成机制详解

本文详解Spark SQL Shuffle 分区数生成机制

wubinghua15180087610的博客 408

【打卡帖】7日玩转ESP32——(第4日) 串口的输入输出

【福利帖】7日玩转ESP32——(第4日) 串口的输入输出

1375

Spark SQL读取文件使用/*+ REBALANCE */ 提示,如何控制task分区数量

优化shuffle过程中,Spark SQL读取文件使用/*+ REBALANCE */ 提示,如何控制分区数量?

weixin_57250068的博客 471

基于Cesium实现,动态水面+大坝排水动画

一、绘制面状水域,使用水波纹理,进行渲染,水体透明,可以看到底色。三、使用粒子系统,将喷泉改变方向,加上重力设置,实现排水动画。二、绘制线状三维体,用作模拟大坝拦截效果。四、最后,模拟水位上升,进行淹没分析,

一醉千秋的专栏 1418

Jenkins部署前后端分离项目最全图文教程(手把手教学)

最近Jenkins部署的热度比较高,于是就想出一篇关于我是如何使用Jenkins部署前后端分离项目的,本篇记录了我是如何一步一步去配置、搭建和部署的完整流程,每一行代码都进行了实测和讲解,通过图文的教学写成博客分享给大家!

黄团团的个人博客 4779

【Spark系列7】Spark如何读写hive

hive数据表建立可以在hive上建立,或者使用hiveContext.sql(“create table ....") 1) 写入hive表 case class Person(name:String,col1:Int,col2:String) val sc = new org.apache.spark.SparkContext val hiveContext = new org.a

安全曼巴2020 3015

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

spark小文件过多

什么是小文件? 生产上,我们往往将Spark SQL作为Hive的替代方案,来获得SQL on Hadoop更出色的性能。因此,本文所讲的是指存储于HDFS中小文件,即指文件的大小远小于HDFS上块(dfs.block.size)大小的文件。 小文件问题的影响 一方面,大量的小文件会给Hadoop集群的扩展性和性能带来严重的影响。NameNode在内存中维护整个文件...

a13705510005的博客 3818

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Saprk:数据插入的优化(forachPartition)

#将spark中处理的数据插入到数据库中的优化

ABU009的博客 539

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

2021-08-31 Hive 分区表的使用

场景:有一个月,大概3T多的数据需要存储到hive中进行分析,不设置分区的话,查询数据的效率很差 分区键的选择: 这里选择按天分区 分区表的创建 drop table if exists ods_xty.vnbd_gps_202107_p; create table ods_xty.vnbd_gps_202107_p( row_key String comment "", zdate String comment "", vid BIGINT comment "", lat BIGINT comment "

枪枪枪的博客 437

Spark调优

1.控制文件输出的大小:coalesce2.分区字段的数据类型调整:spark.sql.sources.partitionColumnTypeInference.enabled

517
上一篇: Linux系统的在线求助man page与info page
下一篇: spark中操作hdfs
大怀特
博客等级 码龄6年 5787粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大怀特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值