hadoop,hive等输出数据导出为csv文件
解决:用表格软件打开的数据文件,数据都保存在同一列;通过一些小技巧把一列的数据分成我们所需要的列数。
写论文的时候遇到的问题:
map-reduce
操作后,在终端上呈现的形式:
192.168.1.2 31 24 1
127.0.0.1 26 21 1
192.168.1.2 31 27 2
192.168.1.2 31 25 1
192.168.1.2 44 11 1
192.168.1.100 42 8 1
127.0.0.1 27 55 1
127.0.0.1 26 25 2
192.168.1.2 21 26 2
192.168.1.100 40 87 2
这里的操作仅仅是对日志的长度进行了调整,最终目的是对日志进行聚类,所以对数据整合特征,整理出几个特征包括:
ip,url长度,parameter长度和visit times per hours
这四个特征;
在实际的操作中,是不可能把hadoop的输出打印在终端上然后ctrl+c,ctrl+v,这样的工作量很大。而我们可获得的是:
hadoop fs -get
命令同样也可以把输出文件从hdfs文件系统下载到本地。
但是使用表格软件打开,所有的数据仍然是处在同一列下,且无法分列。所以导致并不能继续后面的python读取csv的操作,会报错;数据
-分列
则可进入分列操作,分列操作需要我们去告诉机器,哪些是数据需要分出来单独成一列,所以以下就是重点:分隔符;tab
,空格等等;
map print
初始代码print ip,format(len(url)),format(len(para))
修改后代码,如下,在第二列和第三列输出之间加入了两个空格,告诉python print (' ')
print ip,format(len(url)),(' '),format(len(para))
于是在把输出文件导出后,使用表格软件打开文件同样是所有的数据存在同一列的情况,这个时候我们对数据列进行数据分列操作后即可分出我们所需要的列数,我这个是四列。如下,我们在终端下cat一下:
ip,url,para,time
127.0.0.1,24,10,303
127.0.0.1,14,11,1
192.168.1.2,39,32,1
192.168.1.2,29,11,2
127.0.0.1,40,10,2
127.0.0.1,333,20,1
127.0.0.1,23,51,2
192.168.1.2,5,18,1
(表头自己加即可)
我们可以看到,数据显示,每列的数据中间都有一个逗号。当然,我们在输出的时候,也可以对数据进行处理,每一列数据都加上逗号,理论上是可行的,我没有试过。鼓励各位多动手。
以上。