如何将 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

如何使用 PIG 将数据从本地系统加载到 hdfs

利用Python将EXCEL,CSV,TSV导入Oracle或者MySQL

如何使用 Pig Latin 从 AWS S3 加载数据

mongodb系统知识(10)

如何使用 apache pig 递归加载文件