私はタイトル別の平均評価は性別3つの入力ファイルが必要なPython MapReduce Hadoopストリーミングジョブ?
である次のような出力を得るためにはPythonのMapReduceのHadoopストリーミングジョブを作成したい3つの小さなサンプル入力ファイル(実際のファイルがはるかに大きい)、# File Name: books.txt
# File Format: BookID|Title
1|The Hunger Games
2|To Kill a Mockingbird
3|Pride and Prejudice
4|Animal Farm
# File Name: ratings.txt
# File Format: ReaderID|BookID|Rating
101|1|1
102|2|2
103|3|3
104|4|4
105|1|5
106|2|1
107|3|2
108|4|3
# File Name: readers.txt
# File Format: ReaderID|Gender|PostCode|PreferComms
101|M|1000|email
102|F|1001|mobile
103|M|1002|email
104|F|1003|mobile
105|M|1004|email
106|F|1005|mobile
107|M|1006|email
108|F|1007|mobile
を持っています
Animal Farm F 3.5
Pride and Prejudice M 2.5
The Hunger Games M 3
To Kill a Mockingbird F 1.5
私はそれを行くを与えたが、私はそのようにそれを正しく並べ替えることができないですので、Mapper部で立ち往生しています私はこのフォーラムを検索し、誰かがsolutionを指摘したが、それは代わりに3の2入力ファイルのためのものですレデューサーは、タイトル&の第1レコードを適切に認識することができる性別、次に集計を開始します。下のマッパーコード
#!/usr/bin/env python
import sys
for line in sys.stdin:
try:
ReaderID = "-1"
BookID = "-1"
Title = "-1"
Gender = "-1"
Rating = "-1"
line = line.strip()
splits = line.split("|")
if len(splits) == 2:
BookID = splits[0]
Title = splits[1]
elif len(splits) == 3:
ReaderID = splits[0]
BookID = splits[1]
Rating = splits[2]
else:
ReaderID = splits[0]
Gender = splits[1]
print('%s\t%s\t%s\t%s\t%s' % (BookID, Title, ReaderID, Rating, Gender))
except:
pass
PS:PythonとHadoop Streamingのみを使用する必要があります。 Dumbo、mrjobなどのPythonパッケージをインストールすることはできません。
事前に助けてください。 Lobbie
私はhttps://allthingshadoop.com/2011/12/16/simple-hadoop-streaming-tutorial-using-joins-and-keysから見ることができるように-with-python /の場合、sortコマンドを使用してマッパーのソートを行いました。ここでは、各ループの出力を保存したり、リストや辞書にprintステートメントを保存したり、並べ替えたり、印刷して出力したりすることができます。これは単なる提案です。 – pmaniyan
こんにちは@pmaniyan、応答ありがとう。私がPython、Hadoop、Mapreduceに慣れていないので、いくつかのサンプルコードを表示できますか?ありがとう、ロビー。 – Lobbie
私にお試しください。ソートの問題を解決しようとしています。あなたはHadoop環境でそれを試してみる必要があります。 – pmaniyan