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

时间:2012-01-25 11:02:59

标签: hadoop apache-pig

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

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

1 个答案:

答案 0 :(得分:6)

  

使用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的基础上拆分文件,所以你怎么知道在哪里放置root标签?这可能应该是某种后处理,以生成格式良好的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脚本来完成。