用于文件操作的 Pig 或 Hive
Posted
技术标签:
【中文标题】用于文件操作的 Pig 或 Hive【英文标题】:Pig or Hive for a file manipulation 【发布时间】:2015-11-19 09:28:16 【问题描述】:我有一个文件组成如下:
&009:65
34KKll90JJKK87LLOO
%(..)?.I$£.....
&013:35
36KKll90TTYY87LLPP
%%(.9)?'
&025:66
55KKll88ZZYY87MMQQ
%&(.9)?%%??-_'
我想得到一个文件:
&009:65 34KKll90JJKK87LLOO %(..)?.I$£.....
&013:35 36KKll90TTYY87LLPP %%(.9)?'.......
&025:66 55KKll88ZZYY87MMQQ %&(.9)?%%??-_'.......
我使用 hortonworks,我想知道使用 Hive 或 PIG 哪个更好,以及如何使用其中一个来实现这一点?
【问题讨论】:
【参考方案1】:Hive、Pig 和整个 Hadoop 生态系统都希望文件具有单行记录,因此您可以在任何换行符处任意拆分文件,并使用任意数量的 Mapper 单独处理拆分.
您的示例有跨越多行的逻辑记录。不可分割的东西。无法以分布式方式轻松处理。游戏结束。
解决方法:在某个地方启动一个 shell,在本地下载丑陋的东西,使用旧的 sed 或 awk 实用程序重建一致的记录,然后上传结果。然后你可以用 Hive 或 Pig 来读取它。
示例 sed 命令行(awk 恕我直言)...
sed -n '/^&/ N ; N ; N ; N ; s/\n\n/ /g ; p ' UglyStuff.dump > NiceStuff.txt
如果您更喜欢单行:
hdfs dfs -cat /some/path/UglyStuff.dump | sed -n '/^&/ N ; N ; N ; N ; s/\n\n/ /g ; p ' | hdfs dfs -put -f - /different/path/NiceStuff.txt
【讨论】:
以上是关于用于文件操作的 Pig 或 Hive的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pig 将数据存储在 HDFS 上的多个分区文件中