0

我刚开始在笔记本电脑上的单节点集群上使用 hadoop,我尝试用 Python 来做,我比 Java 更了解。显然,流式传输是最简单的方法,无需安装任何其他软件包。

好吧,我的问题是,当我对流媒体进行一些数据分析时,我必须:

  1. 将我的数据(矩阵、数组...)转换为适合流式传输的默认输入文件格式的文本文件。
  2. 在我的 mapper.py 中重新构建我的数据以明确地制作(键,值)对并将它们打印出来。
  3. 以文本格式读取结果并将其转换为矩阵数据,以便我可以用它们做其他事情。

当您使用文本文件作为输入进行字数统计时,一切看起来都很好。但是你如何处理流中的数据结构呢?我这样做的方式似乎无法接受......

4

2 回答 2

1

对于 python 和 hadoop,请查找MRjob包,http ://pythonhosted.org/mrjob/

您可以编写自己的编码-解码协议,将流矩阵行编写为 rownum-values 对,或将每个元素编写为 row:col-value 对等。

无论哪种方式,hadoop 都不是用于矩阵运算的最佳框架,因为它是为大量不相关的数据而设计的,即当您的键值处理不依赖于其他值或以非常有限的方式依赖时。

于 2013-10-22T07:35:38.213 回答
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.loads()json 库将每一行解析为一个非常易于操作的 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]}

在 reducerjson.loads()上使用值来创建 python 字典。例如,这些可以很容易地转换为一个 numpy 数组。

于 2013-10-22T08:17:57.683 回答