cuDF读取CSV文件报错:字符串总大小超出cudf列容量限制
报错原因
这个错误是cuDF的单字符串列容量限制导致的:旧版cuDF单个字符串列的总字符量上限为2GB,新版为4GB,你读取的CSV中存在单个字符串列的总大小超出了对应版本的上限,因此触发运行时错误。
解决方案
仅加载必要列并指定数据类型
读取时通过usecols参数只导入业务需要的列,同时对非字符串类型的列提前指定dtype,避免cuDF自动识别为字符串类型占用额外容量。示例代码:g_df = cudf.read_csv( 'drive/MyDrive/m1.csv', escapechar="\\", # 替换为你实际需要的列名 usecols=["user_id", "create_time", "content"], # 提前指定数值、日期等列的类型,避免被识别为字符串 dtype={"user_id": np.int64, "create_time": "datetime64[ns]"} )分块读取处理
用byte_range参数分批加载文件,每批处理完成后再合并或单独运算,避免一次性加载全量大字符串列。示例代码:chunk_bytes = 1 * 1024 * 1024 * 1024 # 单次读取1GB,可根据显存调整 offset = 0 chunk_list = [] while True: try: chunk = cudf.read_csv( 'drive/MyDrive/m1.csv', escapechar="\\", byte_range=(offset, chunk_bytes) ) chunk_list.append(chunk) offset += chunk_bytes except EOFError: break # 合并所有分块 g_df = cudf.concat(chunk_list, ignore_index=True)预处理超大字符串列
如果确认存在单字符串列总大小超过4GB的情况,可先通过pandas分块读取原始文件,对该列做裁剪、编码为分类值、拆分多列等预处理压缩容量后,再导入cuDF处理。升级cuDF版本
旧版本cuDF的单字符串列上限为2GB,最新稳定版已将上限提升至4GB,升级到最新版cuDF可直接覆盖大部分场景的容量需求。
内容的提问来源于stack exchange,提问作者vicpython
相关产品推荐
相关产品推荐

