我刚开始在我的笔记本电脑上的单节点集群上使用hadoop,我尝试用Python做这件事,我比Java更了解。显然,流式传输是最简单的方法,无需安装任何其他软件包。
我的问题是,当我使用流媒体进行一些数据分析时,我不得不:
当您使用文本文件作为输入执行wordcount时,一切看起来都很好。但是你如何处理流媒体中的数据结构呢?我做的方式似乎是不可接受的......
答案 0 :(得分:1)
对于python和hadoop,请查找MRjob
包,http://pythonhosted.org/mrjob/
您可以将您的ouwn编码解码协议,流矩阵行编写为rownum-values对,或将每个元素编写为row:col-value对等等。
无论哪种方式,hadoop都不是处理矩阵运算的最佳框架,因为它设计用于大量非相关数据,即当你的键值处理不依赖于其他值时,或者取决于非常有限的方式。
答案 1 :(得分:0)
使用json作为文本格式可以非常方便地进行编码和解码。
例如,hdfs上的4 * 4单位矩阵可以存储为:
{"row":3, "values":[0,0,1,0]}
{"row":2, "values":[0,1,0,0]}
{"row":4, "values":[0,0,0,1]}
{"row":1, "values":[1,0,0,0]}
在映射器中,使用json库中的json.loads()
将每行解析为python字典,这非常容易操作。然后返回一个键,然后返回更多json(使用json.dumps()
将python对象编码为json):
1 {"values":[1,0,0,0]}
2 {"values":[0,1,0,0]}
3 {"values":[0,0,1,0]}
4 {"values":[0,0,0,1]}
在reducer中使用json.loads()
对值创建python字典。例如,这些可以很容易地转换为numpy数组。