我刚开始在笔记本电脑上的单节点集群上使用hadoop,我试着用python来做,我比java更了解python。显然,流媒体是最简单的方式来做到这一点,而不安装任何其他软件包。
我的问题是,当我用流媒体做一些数据分析时,我不得不:
转换我的数据(矩阵、数组…)输入到文本文件中,该文件符合流式传输的默认输入文件格式。
在my mapper.py中重新构造数据,以显式地生成(键、值)对并将它们打印出来。
阅读文本格式的结果,然后转换成矩阵数据,这样我就可以用它们做其他事情。
当您使用文本文件作为输入进行字数统计时,一切看起来都很好。但是如何处理流媒体中的数据结构呢?我这样做似乎无法接受。。。
2条答案
按热度按时间83qze16e1#
使用json作为文本格式可以非常方便地进行编码和解码。
例如,hdfs上的4×4单位矩阵可以存储为:
在mapper中使用
json.loads()
从json库将每一行解析成python字典,这非常容易操作。然后返回一个键,后跟更多的json(使用json.dumps()
将python对象编码为json):在减速器使用中
json.loads()
在值上创建python字典。例如,这些可以很容易地转换为numpy数组。k4ymrczo2#
对于python和hadoop,请查找
MRjob
包裹,http://pythonhosted.org/mrjob/您可以编写ouwn编码解码协议,将矩阵行作为rownum值对进行流式处理,或将每个元素作为row:col-value pair 等等。
不管怎样,hadoop都不是用于矩阵运算的最佳框架,因为它是为大量不相关的数据而设计的,也就是说,当键值处理不依赖于其他值,或者依赖于非常有限的方式时。