python實現wordcount程式

2021-07-12 01:44:29 字數 3231 閱讀 2002

需要統計的檔案

$ cat input.txt

foo foo quux iio oo pp pp oo

see you you again welcome test

test ddd gggg ggg

acc aaa dddd

bbb ddd ccc

ddd ccc aaa

wo ni ta

who am i

-----------------------------

#!/usr/bin/env python

import sys

#輸入為標準輸入stdin

for line in sys.stdin:

#刪除開頭和結果的空格

line = line.strip( )

#以預設空格分隔行單詞到words列表

words = line.split( )

for word in words:

#輸出所有單詞,格式為「單詞,1」以便作為reduce的輸入

print '%s\t%s' %(word,1)

--------------------------

reducer.py**

$ cat reducer.py

#!/usr/bin/env python

import sys

current_word = none

current_count = 0

word = none

for line in sys.stdin:

line = line.strip()

word,count = line.split('\t',1)

#轉換count從字元型成整型

try:

count = int(count)

except valueerror:

#非字元時忽略此行

continue

if current_word == word:

current_count +=count

else:

if current_word:

#輸出當前word統計結果到標準輸出

print '%s\t%s' %(current_word,current_count)

current_count =count

current_word =word

#輸出最後乙個word統計

if current_word ==word:

print '%s\t%s' % (current_word,current_count)

------------------------------

# basic test

foo     1

foo     1

quux    1

labs    1

foo     1

bar     1

quux    1

bar     1

foo     3

labs    1

quux    2

the     1

project 1

gutenberg       1

ebook   1

of      1

[...]

(you get the idea)

----------------------------------

$ cat word_job.sh

#!/bin/bash

#先刪除輸出目錄

hdfs dfs -rmr /user/hdfs/wordcount/output

#注意,下面配置中的環境值每個人機器不一樣

hadoop jar /usr/hdp/2.3.0.0-2557/hadoop-mapreduce/hadoop-streaming.jar \

-d mapred.map.tasks=5 \

-d mapred.reduce.tasks=5 \

-d mapred.job.map.capacity=5 \

-d mapred.job.reduce.capacity=5 \

-d mapred.job.name="wordcount" \

-d num.key.fields.for.partition=1 \

-d stream.num.map.output.key.fields=2 \

-d stream.non.zero.exit.is.failure=false \

-partitioner org.apache.hadoop.mapred.lib.keyfieldbasedpartitioner \

-input "/user/hdfs/wordcount/input.txt" \

-output "/user/hdfs/wordcount/output" \

-reducer "python reducer.py" \

-file "reducer.py"

注意:ambari hadoop-streaming.jar位置

/usr/hdp/2.3.0.0-2557/hadoop-mapreduce/hadoop-streaming.jar

cdh hadoop-streaming.jar位置

/opt/cloudera/parcels/cdh-5.5.1-1.cdh5.5.1.p0.11/lib/hadoop-mapreduce/hadoop-streaming.jar

$ hdfs dfs -cat /user/hdfs/wordcount/output/*

acc     1

ddd     3

dddd    1

i       1

ni      1

wo      1

aaa     2

am      1

iio     1

again   1

ccc     2

gggg    1

oo      2

quux    1

see     1

ta      1

test    2

welcome 1

bbb     1

foo     2

ggg     1

pp      2

who     1

you     2

關於Hadoop2 7 2執行wordcount

1.每次機器重啟後需要重新format否則namenode無法啟動的問題,解決辦法就是修改core site.xml,在你的hadoop安裝目錄新增臨時資料夾。hadoop.tmp.dir usr local hadoophome hadoop tmp 2.新建hdfs輸入資料夾input2。bin...

Spark使用UDF函式之WordCount實現

使用者定義函式 user defined functions,udfs 是大多數 sql 環境的關鍵特性,用於擴充套件系統的內建功能。udf允許開發人員通過抽象其低階語言實現來在更高階語言 如sql 中啟用新功能。apache spark 也不例外,並且提供了用於將 udf 與 spark sql工...

執行hadoop自帶的案例 wordcount

主要有四個步驟 一 在hdfs分布式檔案系統 中建立兩個資料夾,分別存放輸入 輸出資料 1 bin hadoop fs mkdir p data wordcount 建立的輸入資料目錄 2 bin hadoop fs mkdir p output 建立的輸出資料目錄 二 將要測試的檔案上傳到hdfs...