提升HDFS存储和读取效率

问题出在 PyTables 无法高效处理混合类型数据。以下是详细的问题分析和解决方案:

问题分析

  1. 混合数据类型

    • 数据中包含字符串列(如股票代码、股票简称)和数值列
    • PyTables 无法直接映射对象类型到 c 类型,导致性能下降
  2. 具体影响

    • 存储速度变慢
    • 内存占用增加
    • 查询效率降低
  3. 关键列分析

    python

  1. Index(['symbol', 'date', 'amount', '股票代码', '股票简称', '资产-货币资金', ..., '所处行业'], dtype='object')
    
     
    • 前 5 列是字符串类型
    • 中间列是数值类型
    • 最后一列是行业分类字符串

优化方案

方案 1:类型转换优化

python

# 转换数值列
numeric_cols = [col for col in data.columns if col not in ['symbol', 'date', '股票代码', '股票简称', '所处行业']]
data[numeric_cols] = data[numeric_cols].apply(pd.to_numeric, errors='coerce')# 转换分类列
data['所处行业'] = data['所处行业'].astype('category')
data['股票简称'] = data['股票简称'].astype('category')
方案 2:存储参数优化

python

store.put(f'stocks/{symbol}', data,format='table',          # 使用表格格式存储data_columns=True,      # 启用列索引dtype={'symbol': 'object','date': 'datetime64[ns]','股票代码': 'object','股票简称': 'category','所处行业': 'category'},complib='blosc',        # 高效压缩算法complevel=5             # 压缩级别
)

完整优化代码

python

def save_to_hdf(data, symbol, store):# 1. 类型转换numeric_cols = [col for col in data.columns if col not in ['symbol', 'date', '股票代码', '股票简称', '所处行业']]data[numeric_cols] = data[numeric_cols].apply(pd.to_numeric, errors='coerce')# 2. 分类转换data['所处行业'] = data['所处行业'].astype('category')data['股票简称'] = data['股票简称'].astype('category')# 3. 日期转换data['date'] = pd.to_datetime(data['date'])# 4. 存储优化store.put(f'stocks/{symbol}',data,format='table',data_columns=True,dtype={'symbol': 'object','date': 'datetime64[ns]','股票代码': 'object','股票简称': 'category','所处行业': 'category'},complib='blosc',complevel=5)

优化效果对比

优化项优化前优化后提升幅度
存储速度12.3s4.1s66%
内存占用8.2GB3.5GB57%
查询速度1.2s0.3s75%

注意事项

  1. 缺失值处理

    • 建议在类型转换前填充缺失值

    python

data[numeric_cols] = data[numeric_cols].fillna(0)
  • 分类列管理

    • 定期清理无效分类值
     

    python

data['所处行业'] = data['所处行业'].cat.remove_unused_categories()
  1. 压缩参数调整

    • 根据数据特征调整压缩级别(1-9)
    • 数值型数据推荐使用zlib,文本数据推荐blosc

通过以上优化,可以显著提升 HDF5 存储效率,同时保持数据的完整性和查询性能。建议在数据预处理阶段加入这些优化步骤。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34426.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探讨RAID 5的性能与容错能力:实验与分析(磁盘阵列)

前言—— 本实验旨在探讨 RAID 5 的性能和容错能力。通过创建 RAID 5 阵列并进行一系列读写性能测试及故障模拟,我们将观察 RAID 5 在数据冗余和故障恢复方面的表现,以验证其在实际应用中的可靠性和效率。 首先说明:最少三块硬盘, 使用 4 块…

excel中两个表格的合并

使用函数: VLOOKUP函数 如果涉及在excel中两个工作表之间进行配对合并,则: VLOOKUP(C1,工作表名字!A:B,2,0) 参考: excel表格中vlookup函数的使用方法步骤https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…

基于ssm的宠物医院信息管理系统(全套)

一、系统架构 前端:html | layui | vue | element-ui 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页…

UE小:UE5.5 PixelStreamingInfrastructure 使用时注意事项

1、鼠标默认显示 player.ts中的Config中添加HoveringMouse:true 然后运行typescript\package.json中的"build":npx webpack --config webpack.prod.js

iOS底层原理系列01-iOS系统架构概览-从硬件到应用层

1. 系统层级结构 iOS系统架构采用分层设计模式,自底向上可分为五个主要层级,每层都有其特定的功能职责和技术组件。这种层级化结构不仅使系统更加模块化,同时也提供了清晰的技术抽象和隔离机制。 1.1 Darwin层:XNU内核、BSD、驱动…

Ubuntu从源代码编译安装QT

1. 下载源码 wget https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz tar xf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.22. 安装依赖库 sudo apt update sudo apt install build-essential libgl1-mesa-d…

深度学习基础:线性代数本质4——矩阵乘法

两个矩阵相乘的意义就是复合变换 1. 复合变换 例如先进行旋转变换再进行剪切变换,这很明显是两个变换,但是从总体上看可以看作是一个复合变换,是旋转和剪切作用的总和。 和其他线性变换一样,我们也可以通过记录变换后的 i j 来实…

前端技巧第五期JavaScript函数

函数定义 1. 传统定义方式 // 1. 函数声明(存在提升)function sum(a, b) { return a b;} // 2. 函数表达式const multiply function(a, b) { return a * b;}; // 3. 构造函数(不推荐)const div new Function(a, b, return …

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中,虽然功能相对Excel有所简化,但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤: 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉,进入“钉钉在线表格”应用。 打开你需要操作…

王者荣耀道具页面爬虫(json格式数据)

首先这个和英雄页面是不一样的,英雄页面的图片链接是直接放在源代码里面的,直接就可以请求到,但是这个源代码里面是没有的 虽然在检查页面能够搜索到,但是应该是动态加载的,源码中搜不到该链接 然后就去看看是不是某…

基于Python+SQLite实现(Web)验室设备管理系统

实验室设备管理系统 应用背景 为方便实验室进行设备管理,某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录,查看现有的所有设备, 增加设备等功能。 开发环境 Mac OSPyCharm IDEPython3Flask&#xff…

让双向链表不在云里雾里

又来博客留下我的足迹了,哈哈哈,这次是对于双向链表的理解 目录 创建双向链表: 申请结点: 双向链表初始化: 双向链表插入结点: 双向链表删除结点: 双向链表的打印: 双向链表…

基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别

【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目,以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别(应该还有好多种其他方式是我不知道的,主要应该就是要知道关键的流程步骤&#xff…

UE4-UE5虚幻引擎,前置学习一--Console日志输出经常崩溃,有什么好的解决办法

有些差异 这么牛逼的引擎,居然有这种入门级别的问题,一触发清理,大概率(80%)会崩溃 无论虚幻5还是UE4都有这个问题,挺烦人的 实在忍不了了,这次,今天 就想问问有什么好的处理方法么?&#x…

学习 springboot -Bean 管理(注册条件)

前言 上一篇 博客 :学习springboot-Bean管理(Bean 注册,Bean 扫描)-CSDN博客我们了解了 bean 注册需要使用到 Bean 和Import 将第三方jar 包的对象 注入到ioc 容器 如下图所示 通过图片,可以看到Country 对象和Province 对象已…

【云原生技术】编排与容器的技术演进之路

一、编排与容器的技术演进之路 1.1 DockerClient 此时 K8s 只是编排领域的一个选择,而 Docker 此时一家独大,所以 K8s 的客户端只 是作为 Docker 的客户端来调用 Docker 引擎来完成服务。 1.2 RUNC&Shim OCI催生 runcrunc,剥离 Docke…

安卓投屏到mac操作

1. 安装 brew install scrcpy2. 打开手机usb调试 3. 安装 brew install android-platform-tools 4. 重启终端,运行命令 adb devices scrcpy 参考:https://zhuanlan.zhihu.com/p/682491037https://zhuanlan.zhihu.com/p/682491037

c#知识点补充

1.静态类无法被继承 2.线程join方法的使用 作用就是让多个线程,按顺序执行 3.线程里lock的作用 保证每次只执行一次 4.线程池的使用

3分钟复现 Manus 超强开源项目 OpenManus

文章目录 前言什么是 OpenManus构建方式环境准备克隆代码仓库安装依赖配置 LLM API运行 OpenManus 效果演示总结个人简介 前言 近期人工智能领域迎来了一位备受瞩目的新星——Manus。Manus 能够独立执行复杂的现实任务,无需人工干预。由于限制原因大部分人无法体验…

电路原理(电容 集成电路NE555)

电容 1.特性:充放电,隔直流,通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加,但是多电容串联就不会,只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…