如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?
Posted
技术标签:
【中文标题】如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?【英文标题】:how to load/export CSV/TSV files from Pig to Pandas? 【发布时间】:2016-04-26 12:13:11 【问题描述】:我正在使用 Apache PIG 处理一些数据,并在我的脚本末尾使用
store data into '/mypath/tempp2' using PigStorage('\t','-schema');
fs -getmerge /mypath/tempp2 /localpath/data.tsv;
这样我就有了一个 tsv
文件,我可以在 Pandas 中使用 read_csv(headers=0)
读取该文件。
问题在于tsv
文件现在包含第一行的标题(这很好),但也包含连接到第二行中第一个观察的架构,例如:
col1 col2 col3
pigschema0 1 2
假设第一行是[0,1,2]
。因此,除非我在 read_csv
中使用 skiprows=1
(丢失那一行),否则我的数据中会出现这种奇怪的观察结果。
所以我想知道是否有更好的方法来导出我的数据,同时获取标题。
非常感谢!
【问题讨论】:
可能会有所帮助:***.com/questions/13696036/export-from-pig-to-csv 谢谢!链接很旧,所以我希望现在有更好的解决方案 另外,我并不关心格式(csv 或其他 json),只要我可以将其加载到 pandas 并获得正确的标题 【参考方案1】:首先你要为-getmerge
使用-nl
参数:
store data into '/mypath/tempp2' using PigStorage('\t','-schema');
fs -getmerge -nl /mypath/tempp2 /localpath/data.tsv;
Docs:
可选 -nl 可以设置为启用在以下位置添加换行符 (LF) 每个文件的结尾。
那么您的/localpath/data.tsv
将具有以下结构:
0 - headerline
1 - empty line
2 - PIG schema
3 - empty line
4 - 1-st line of DATA
5 - 2-nd line of DATA
...
所以现在您可以在 pandas 中轻松阅读:
df = pd.read_csv('/localpath/data.tsv', sep='\t', skiprows=[1,2,3])
【讨论】:
太棒了!但是你知道我应该如何相应地修改我在 PIG 中的STORE
行吗?
@Noobie,仅供参考 - 我刚刚更新了我的答案 - 添加了 -nl
@Noobie,有帮助吗?
@Noobie,很高兴我能帮上忙。 PS我以前从未和PIG玩过,所以这是一个尝试并学习新东西的好机会以上是关于如何将 CSV/TSV 文件从 Pig 加载/导出到 Pandas?的主要内容,如果未能解决你的问题,请参考以下文章
jQuery插件,用于将html表导出为JSON、XML、CSV、TSV、TXT、SQL、Word、Excel、PNG和PDF