用于科学数据分析的Python流媒体
我刚开始在笔记本电脑上的一个单节点集群上使用hadoop,我尝试用Python来实现它,我比Java更了解Python。显然,流式传输是最简单的方法,无需安装任何其他软件包 我的问题是,当我用流媒体做一些数据分析时,我必须:用于科学数据分析的Python流媒体,python,hadoop,streaming,analysis,Python,Hadoop,Streaming,Analysis,我刚开始在笔记本电脑上的一个单节点集群上使用hadoop,我尝试用Python来实现它,我比Java更了解Python。显然,流式传输是最简单的方法,无需安装任何其他软件包 我的问题是,当我用流媒体做一些数据分析时,我必须: 将我的数据(矩阵、数组…)转换为适合流式处理的默认输入文件格式的文本文件 在my mapper.py中重新构造数据,以显式生成(键、值)对并将其打印出来 阅读文本格式的结果,然后转换成矩阵数据,这样我就可以用它们做其他事情 当您使用文本文件作为输入进行字数统计时,一切看起来
当您使用文本文件作为输入进行字数统计时,一切看起来都很好。但是如何处理流媒体中的数据结构呢?我这样做似乎是不可接受的…对于python和hadoop,请查找
MRjob
包
您可以编写ouwn编码解码协议,将流媒体矩阵行作为rownum值对,或将每个元素作为row:col值对,等等
无论哪种方式,hadoop都不是用于矩阵运算的最佳框架,因为它是为大量不相关的数据而设计的,也就是说,当键值处理不依赖于其他值或以非常有限的方式依赖时。使用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):
在reducer中,对值使用
json.loads()
,以创建python字典。例如,这些可以很容易地转换成numpy阵列。我在虚拟机中使用了cloudera quickstart包。我不确定我是否能够在Hadoop中安装其他软件包(我尝试了Pydoop,但没有成功),但我以后一定会尝试Mrjob。谢谢使用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]}