我正在使用Hadoop通过python进行数据处理,应使用哪种文件格式?
我的项目中包含大量文本页面.
每个文本文件都有一些头信息,在处理过程中我需要保留这些信息.但是,我不希望标头干扰聚类算法.
我在Hadoop上使用python(或者是否有更适合的子包?)
我应该如何格式化文本文件,并将这些文本文件存储在Hadoop中进行处理?
解决方法:
1)文件
如果使用Hadoop Streaming,则必须使用基于行的文本文件,直到第一个选项卡的数据都作为键传递给映射器.
只需查看the documentation即可进行流式传输.
您也可以将输入文件放入HDFS,这对于大文件来说是值得推荐的.只需查看上面链接中的“大文件”部分.
2)元数据保存
我看到的问题是您的标头信息(元数据)将仅被视为此类数据,因此您必须自己过滤掉它(第一步).传递它比较困难,因为所有输入文件的数据都将在映射步骤之后合并.
您将必须将元数据添加到数据本身的某个位置(第二步),以便以后可以将其关联.您可以为文件的每个数据线发出(密钥,数据元数据),因此可以保留每个数据线的元数据.可能会产生巨大的开销,但是我们正在谈论MapReduce,意味着:pfffrrrr;)
现在是我不知道流与Java实现的工作有多少不同的地方.
如果流式传输为每个文件调用一个映射器,则可以避免以下麻烦,只需将map()的第一个输入作为元数据并将其(或占位符)添加到以下所有数据发布中即可.如果没有,那么接下来是关于Java作业的信息:
至少可以使用JAR映射器将数据与其输入文件关联(请参见here).但是您必须首先提取元数据,因为映射功能可能会在不包含元数据的文件分区上调用.我会提出这样的建议:
>预先创建一个元数据文件,其中包含一个占位符索引:keyx:filex,metadatax
>将此元数据索引放入HDFS
>使用JAR映射器,在setup()期间加载meta-index-file
>参见org.apache.hadoop.hdfs.DFSClient
>匹配filex,为此映射器设置keyx
>将使用过的密钥添加到map()中的每个发射数据线
原文地址:https://codeday.me/bug/20191024/1919108.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。