用于科学数据分析的python流媒体

bvn4nwqk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(415)

我刚开始在笔记本电脑上的单节点集群上使用hadoop,我试着用python来做,我比java更了解python。显然,流媒体是最简单的方式来做到这一点,而不安装任何其他软件包。
我的问题是,当我用流媒体做一些数据分析时,我不得不:
转换我的数据(矩阵、数组…)输入到文本文件中,该文件符合流式传输的默认输入文件格式。
在my mapper.py中重新构造数据,以显式地生成(键、值)对并将它们打印出来。
阅读文本格式的结果,然后转换成矩阵数据,这样我就可以用它们做其他事情。
当您使用文本文件作为输入进行字数统计时,一切看起来都很好。但是如何处理流媒体中的数据结构呢?我这样做似乎无法接受。。。

83qze16e

83qze16e1#

使用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]}

在mapper中使用 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]}

在减速器使用中 json.loads() 在值上创建python字典。例如,这些可以很容易地转换为numpy数组。

k4ymrczo

k4ymrczo2#

对于python和hadoop,请查找 MRjob 包裹,http://pythonhosted.org/mrjob/
您可以编写ouwn编码解码协议,将矩阵行作为rownum值对进行流式处理,或将每个元素作为row:col-value pair 等等。
不管怎样,hadoop都不是用于矩阵运算的最佳框架,因为它是为大量不相关的数据而设计的,也就是说,当键值处理不依赖于其他值,或者依赖于非常有限的方式时。

相关问题