您好,登錄后才能下訂單哦!
Python 中怎么使用Hadoop實現統計功能,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
編寫 map.py
#!/usr/bin/env python import sys def read_inputs(file): for line in file: line = line.strip() yield line.split() def main(): file = sys.stdin lines = read_inputs(file) for words in lines: for word in words: print("{}\t{}".format(word, 1)) if __name__ == "__main__": main()
測試
echo "Hello world Bye world" | ./map.py Hello 1 world 1 Bye 1 world 1
編寫 reduce.py
#!/usr/bin/env python import sys def read_map_outputs(file): for line in file: yield line.strip().split("\t", 1) def main(): current_word = None word_count = 0 lines = read_map_outputs(sys.stdin) for word, count in lines: try: count = int(count) except ValueError: continue if current_word == word: word_count += count else: if current_word: print("{}\t{}".format(current_word, word_count)) current_word = word word_count = count if current_word: print("{}\t{}".format(current_word, word_count)) if __name__ == "__main__": main()
測試
echo "Hello World Bye World Hello" | ./map.py | sort | ./reduce.py Bye 1 Hello 2 World 2
上面都是使用 Python 自己的特性去進行統計,下面展示使用 Hadoop 的流程來執行
查找 hadoop-stream 庫的位置
find ./ -name "hadoop-streaming*.jar" ./local/hadoop/share/hadoop/tools/sources/hadoop-streaming-2.7.3-test-sources.jar ./local/hadoop/share/hadoop/tools/sources/hadoop-streaming-2.7.3-sources.jar ./local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar
在 HDFS 上建立讀入文件夾 input
hadoop -fs mkdir input
將待處理文件放入 HDFS
hadoop -fs put allfiles input
運行命令處理
hadoop jar ~/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input input -output output -mapper ./map.py -reducer ./reduce.py
處理后的文件
Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2
關于Python 中怎么使用Hadoop實現統計功能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。