使用PIG可以读取哪些类型的文件格式?我怎样才能以不同的格式存储它们?
有几个内置加载和存储方法 http://pig.apache.org/docs/r0.9.2/func.html#load-store-functions,但它们是有限的:
- BinStorage - “二进制”存储
- PigStorage - 加载和存储由某些内容(例如制表符或逗号)分隔的数据
- TextLoader - 逐行加载数据(即由换行符分隔)
扑满 https://cwiki.apache.org/confluence/display/PIG/PiggyBank是社区贡献的用户定义函数的库,它具有多种装载和存储方式 http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/storage/,其中包括 XML 加载器,但不包括 XML 存储器。
假设我们有 CSV 文件,我想将其存储为 MXL 文件,如何做到这一点?
我假设你在这里指的是 XML...在 Hadoop 中,在 XML 中存储有点粗糙,因为它在缩减器的基础上分割文件,那么你如何知道将根标签放在哪里呢?这可能应该是某种后处理以生成格式良好的 XML。
你可以做的一件事就是写一个UDF http://pig.apache.org/docs/r0.9.2/udf.html#eval-functions将您的列转换为 XML 字符串:
B = FOREACH A GENERATE customudfs.DataToXML(col1, col2, col3);
例如,说col1
, col2
, col3
are "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 脚本来完成。