如何用hadoop实现k-means

如何用hadoop实现k-means,第1张

(1)、获取文件的总行数: wc datatxt 。可以得到文件的行数是 :10

(2)、因为我要分为三类,所以10/3=3,那么我取的行数就是1,3,6(这个行数可以自己选择,比如也可以直接去前三行 head -n 3 datatxt >centerstxt),然后使用如下命令:awk 'NR==1||NR==3||NR==6' datatxt > centerstxt,然后再把centerstxt上传到HDFS上就可以了。

(下面我使用的是前三行作为数据中心文件)

下面的程序中就不用设置要分 的类别和数据文件的维度数了,我在写这篇和前篇文章的时候参考了这篇文章:>

sed 可以实现 但sed不灵活

已测试

#!/bin/sed -n:next/^student:/{p:gettoendnp/^$/b nextb gettoend}

保存到文件codesed中 使用 sed -f codesed dattxt 就可以输出文件

但文件格式必须严格,每个 student以空白行作为结束,结束行内没有任何字符。建议增加一个关键字end 用来作为结束标记。

观察一 、先输出两个值,其中NF为awk正在处理记录(列)的字段 总数 ,$NF为每行 最后一个字段的值

观察二 、如下命令输出4个值,注意最后俩字段的值是怎么来的:S[LISTEN]  ++S[LISTEN]

观察三 、利用awk的行处理特性,遍历了所有tcp开头的行

定义出不同状态命名的数组下标,并分别++计数赋值给数组元素,最后打印$NF和数组S[$NF]的值

CLOSED:无连接是活动的或正在进行

LISTEN:服务器在等待进入呼叫

SYN_RECV:一个连接请求已经到达,等待确认

SYN_SENT:应用已经开始,打开一个连接

ESTABLISHED:正常数据传输状态

FIN_WAIT1:应用说它已经完成

FIN_WAIT2:另一边已同意释放

ITMED_WAIT:等待所有分组死掉

CLOSING:两边同时尝试关闭

TIME_WAIT:另一边已初始化一个释放

LAST_ACK:等待所有分组死掉

用来统计tcp各个状态连接数的shell脚本

>

awk是一个文本处理工具,通常用于处理数据并生成结果报告

语法格式

第一种形式

语法格式解释

BEGIN正式处理数据之前

pattern匹配模式

{commands}匹配命令,可能多行

END处理完所有匹配数据后执行

第二种形式

内置变量含义

$0整行内容

n当前行的第1-n个字段(按照指定分隔符分割后)

NF(Number Field)当前行的字段个数,也就是多少列

NR(Number Row)当前行的行号,从1开始计数

FNR(File Number Row)多文件处理时,每个文件行号单独计数,都是从0开始

FS(Field Separator)输入字段分割符。不指定默认以空格或者Tab键分割

RS(Row Separator)输入行分割符。默认回车\n

OFS(Output Field Sepatator)输出字段分割符。默认为空格

ORS(Output Row)输出行分隔符。默认为回车

FILENAME当前输入的文件名字

ARGC命令行参数个数

ARGV命令行参数数组

需要指定分隔符:

不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)

showtxt文件内容如下

输出如下:

输出如下

可以用这个输出每一行的最后一列的值

输出如下(没有混合使用,例子比较简单)

showtxt的文件内容如下

先输出每一行数据

输入如下

输出每一行的第二列

输出如下

在上面基础上指定行分隔符

输出如下

再次指定列分隔符

输出如下

showtxt的文件内容如下

输入如下,因为是对行进行处理,所以有几行,输出几次文件名

jps -l输入如下,运行的服务如下

想关闭mbase-spider-10jar这个jar包的服务,可以写一个如下脚本,非常方便,更高阶用法另开一篇文章好好写写

#假设c源文件后缀都为c

find -name c -print|xargs cat -b |tail -1|awk '{print $1}'

或者

find -name c -print|xargs cat|sed '/^$/d'|wc -l

试试看对不对。1年多没碰了,手上也没有环境测试。

awk:用于一行中分成数个“字段”来处理。适合处理 小型数据。

运行模式:awk '条件类型1{动作1} 条件类型2{动作2} ' filename。

# last | awk '{print $1 "\t" $3}' <== 查看登录者的数据,只显示登录名和ip地址,并以[tab]隔开

awk 的内置变量。

变量名称 代表的含义

NF 每一行($0)拥有的字段总数

NR 当前 awk 所处理的是 “第几行” 数据

FS 当前分隔符,默认空格键

awk 的逻辑运算符

特点

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据 *** 作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。

使用awk的内置函数split,将第三个字段根据分隔符“-”分割并存入数组,最后跟随$1和$2逐个打印。

$ echo "aaa 3 1-2-3-4-5" | awk '{n=split($3,a,"-");for(i=1;i<=n;i++)print $1,$2,a[i]}'aaa 3 1aaa 3 2aaa 3 3aaa 3 4aaa 3 5

以上就是关于如何用hadoop实现k-means全部的内容,包括:如何用hadoop实现k-means、awk怎样提取匹配行的下几行,下几行的行数要大于一、【shell】对一条常用命令(netstat结合awk统计TCP连接数)的理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9743435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存