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

如何解决Pandas将Parquet转CSV时向量内容换行的问题?

解决Spark MLlib Word2Vec输出Parquet转CSV时向量换行问题

我明白你遇到的麻烦了——把Spark MLlib输出的Word2Vec Parquet文件转成CSV时,原本的向量字符串被拆得乱七八糟甚至换行。这问题的根源很简单:你用空格作为CSV的分隔符,但向量本身就包含大量空格,Pandas会把这些空格当成列分隔的标记,自然就把一个向量拆成了多个“列”,最终输出时就乱套了。

给你几个可行的解决办法,按需选择:

方法1:改用逗号作为CSV分隔符(最稳妥)

CSV格式默认就是用逗号分隔的,这样向量里的空格不会被误解析,Pandas还会自动给带空格的字段加上引号,完美保留向量的完整格式:

import pandas as pd
import pyarrow.parquet as pq

# 读取Parquet文件
data = pq.read_pandas('C://Users//...//p.parquet', columns=['word', 'vector']).to_pandas()
# 用逗号分隔写入CSV
data.to_csv('C://Users/...//p.csv', sep=",", encoding='utf-8', columns=['word', 'vector'], index=False, header=False)

方法2:坚持用空格分隔,强制给向量加引号

如果你必须用空格作为分隔符,可以通过quoting参数让Pandas自动给带空格的字段(也就是你的向量)加上引号,这样空格分隔符就不会拆分向量内容了:

import pandas as pd
import pyarrow.parquet as pq
import csv

data = pq.read_pandas('C://Users//...//p.parquet', columns=['word', 'vector']).to_pandas()
# 设置QUOTE_NONNUMERIC,让非数字字段自动加引号
data.to_csv('C://Users/...//p.csv', sep=" ", encoding='utf-8', columns=['word', 'vector'], 
            index=False, header=False, quoting=csv.QUOTE_NONNUMERIC)

或者你也可以手动给向量字段包裹双引号,然后关闭自动引号功能:

import pandas as pd
import pyarrow.parquet as pq
import csv

data = pq.read_pandas('C://Users//...//p.parquet', columns=['word', 'vector']).to_pandas()
# 手动给向量加上双引号
data['vector'] = '"' + data['vector'] + '"'
# 写入时关闭自动引号,避免重复加引号
data.to_csv('C://Users/...//p.csv', sep=" ", encoding='utf-8', columns=['word', 'vector'], 
            index=False, header=False, quoting=csv.QUOTE_NONE)

试一下上面的方法,你的CSV输出应该就能和Parquet里的格式完全一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:30:52