可以使用 PIG 读取的文件格式

Posted

技术标签:

【中文标题】可以使用 PIG 读取的文件格式【英文标题】:file formats that can be read using PIG 【发布时间】:2012-01-25 11:02:58 【问题描述】:

使用 PIG 可以读取哪些文件格式?

如何以不同的格式存储它们?假设我们有 CSV 文件,我想将其存储为 MXL 文件,如何做到这一点?每当我们使用 STORE 命令时,它都会创建目录并将文件存储为 part-m-00000 我如何更改文件名并覆盖目录?

【问题讨论】:

【参考方案1】:

使用 PIG 可以读取哪些文件格式?如何以不同的格式存储它们?

built-in loading and storing methods有几个,但数量有限:

BinStorage - “二进制”存储 PigStorage - 加载和存储由某些东西(例如制表符或逗号)分隔的数据 TextLoader - 逐行加载数据(即,由换行符分隔)

piggybank 是一个社区贡献的用户定义函数库,它有a number of loading and storing methods,其中包括一个 XML 加载器,但不包括一个 XML 存储器。


假设我们有 CSV 文件,我想将其存储为 MXL 文件,如何做到这一点?

我假设你的意思是这里的 XML...在 Hadoop 中存储在 XML 中有点粗糙,因为它在 reducer 的基础上拆分文件,那么你怎么知道将根标记放在哪里?这可能应该是某种后处理来生成格式良好的 XML。

您可以做的一件事是 write a UDF 将您的列转换为 XML 字符串:

B = FOREACH A GENERATE customudfs.DataToXML(col1, col2, col3);

例如,col1col2col3 分别是 "foo"37"lemons"。你的 UDF 可以输出字符串"<item><name>Foo</name><num>37</num><fruit>lemons</fruit></item>"


每当我们使用 STORE 命令时,它都会创建目录并将文件存储为 part-m-00000 我如何更改文件名并覆盖目录?

您不能将输出文件的名称更改为 part-m-00000 以外的名称。这就是 Hadoop 的工作原理。如果您想更改它的名称,您应该在事后使用hadoop fs -mv output/part-m-00000 newoutput/myoutputfile 之类的东西对其进行处理。这可以通过运行 pig 脚本然后执行此命令的 bash 脚本来完成。

【讨论】:

以上是关于可以使用 PIG 读取的文件格式的主要内容,如果未能解决你的问题,请参考以下文章

Pig:读取多个文件并逐列追加

Pig:更改输出文件 NAME 的格式

无法配置 Pig 将中间文件存储为 LZO 格式

Pig - 读取存储为 Avro 的 Hive 表

Pig - 生成 JSON 文件的结构格式

使用 pig,如何将混合格式的行解析为元组和一袋元组?