You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python读取HDFS中的.h5文件?读取乱码问题求助

解决Python读取HDFS中.h5文件乱码的问题

你遇到的乱码问题很典型——.h5是二进制格式文件,直接按文本行读取肯定会得到一堆看不懂的乱码。我给你两种实用的解决思路,都是亲测有效的:

方法一:先下载到本地再读取

这种方法直观易懂,适合文件体积不大的场景:

from hdfs import Client
import h5py
import pandas as pd

# 初始化HDFS客户端
c = Client("http://192.168.1.81:50070")

# 将HDFS上的.h5文件下载到本地临时路径(可自定义路径)
local_file = "./temp_000001.h5"
c.download('/stocks/test/pred/20140103/000001.h5', local_file, overwrite=True)

# 方式1:用h5py读取(通用的HDF5文件读取方式)
with h5py.File(local_file, 'r') as hdf_file:
    # 先查看文件内包含的所有数据集名称
    print("HDF5文件中的数据集:", list(hdf_file.keys()))
    # 读取指定数据集(替换成你实际的数据集名称,比如'data')
    dataset = hdf_file['data'][:]
    print(dataset)

# 方式2:用pandas读取(如果.h5文件是用pandas存储的DataFrame)
df = pd.read_hdf(local_file, key='data')
print(df.head())

方法二:直接在内存中读取(无需本地存储)

如果文件很大或者不想占用本地磁盘空间,可以直接把HDFS文件的字节流读到内存中处理:

from hdfs import Client
import h5py
import pandas as pd
from io import BytesIO

c = Client("http://192.168.1.81:50070")

# 读取HDFS文件的字节流,分块读取避免内存溢出
with c.read('/stocks/test/pred/20140103/000001.h5', chunk_size=1024*1024) as reader:
    # 将字节流转换为可随机访问的类文件对象
    byte_stream = BytesIO(reader.read())

# 用h5py读取内存中的HDF5文件
with h5py.File(byte_stream, 'r') as hdf_file:
    print("HDF5文件中的数据集:", list(hdf_file.keys()))
    dataset = hdf_file['data'][:]
    print(dataset)

# 或者用pandas读取内存中的文件
byte_stream.seek(0)  # 重置文件指针到开头
df = pd.read_hdf(byte_stream, key='data')
print(df.head())

注意事项

  • 记得替换代码中的数据集名称(比如示例中的'data'),可以通过list(hdf_file.keys())查看文件内的所有数据集;
  • 如果HDFS文件权限受限,确保你的客户端有足够的读取权限;
  • 大文件推荐用第二种方法,分块读取的chunk_size可以根据你的内存情况调整。

内容的提问来源于stack exchange,提问作者littleRpl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:34:01