Hadoop示例映射使用Awk减少程序

时间:2013-07-22 14:03:50

标签: hadoop awk mapreduce

我熟悉使用Java的Hadoop。仅使用AWK寻找示例Hadoop Map reduce程序。

对于包含...

的文本文件
A k1
B k1
C k2
D k3

寻找o / p

k1 2
k2 1
k3 1

2 个答案:

答案 0 :(得分:4)

这样可以解决问题:

$ awk '{a[$2]++}END{for(k in a)print k,a[k]}' file
k1 2
k2 1
k3 1

答案 1 :(得分:4)

我建议使用Hadoop流来完成此操作。我不是一个awk专家,但是使用@sudo_O答案并将其转换为Hadoop世界就是我要做的事情:

  1. 编写一个将用作映射器的Awk脚本。你只需要一个映射器,不需要减速器。

    $ cat mapper.awk
    #!/usr/bin/awk -f
    
    {a[$2]++}END{for(k in a)print k,a[k]}
    
  2. 您可以执行以下操作来执行Hadoop流式传输作业:

    ${HADOOP_HOME}/bin/hadoop \
    jar ${HADOOP_HOME}/contrib/streaming/*.jar \
    -D mapreduce.job.reduces=0 \
    -D mapred.reduce.tasks=0 \
    -input /path/to/input.txt \
    -output /path/to/output/dir \
    -mapper mapper.awk \
    -file /path/to/mapper.awk
    
  3. 您可以通过以下方式查看HDFS中的结果:

    hadoop fs -cat /path/to/output/dir/*
    
相关问题