我熟悉使用Java的Hadoop。只使用AWK查找示例Hadoop Map簡化程序。使用Awk的Hadoop示例地圖減少程序
對於包含一個文本文件...
A k1
B k1
C k2
D k3
尋找一個O/P
k1 2
k2 1
k3 1
我熟悉使用Java的Hadoop。只使用AWK查找示例Hadoop Map簡化程序。使用Awk的Hadoop示例地圖減少程序
對於包含一個文本文件...
A k1
B k1
C k2
D k3
尋找一個O/P
k1 2
k2 1
k3 1
我會建議使用Hadoop流媒體來做到這一點。我不以任何方式一個awk中的專家,但使用@sudo_O答案並將它轉換爲Hadoop的世界這裏是我會做:
寫入將作爲您的映射awk腳本。你只需要一個映射器,不需要減速器。
$ cat mapper.awk
#!/usr/bin/awk -f
{a[$2]++}END{for(k in a)print k,a[k]}
您可以運行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
您可以通過執行查看HDFS結果:
hadoop fs -cat /path/to/output/dir/*
這將這樣的伎倆:
$ awk '{a[$2]++}END{for(k in a)print k,a[k]}' file
k1 2
k2 1
k3 1
但是尋找hadoop map reduce可以在包含多個節點的集羣上運行... –
我對Hadoop一無所知......我知道如何使用'awk'來執行文本轉換。給出的'awk'腳本將輸入您的示例輸入並將其映射到示例輸出,這就是您要求的輸出。如果這不是你正在尋找的,請清楚地編輯你的問題,說明問題。 –
我想在包含多個數據節點的集羣上運行它..我清楚地指定了「hadoop map reduce program using awk」 –
這似乎不太可能你會找到一個既是awk專家又是「Hadoop Map reduce」專家(無論是什麼!)。您展示了示例輸入和期望輸出,並要求使用awk腳本來執行該轉換,但之後拒絕了@ sudo_0的答案。不知道你希望從這裏走到哪裏。 –