2016-10-21 6 views
1

MapReduceのレデューサーを書いているうちに問題が発生しました。 私は非常に大きなファイルの最初の10行を取得したいと私はループと休憩に使用されます。しかし、breakコマンドは、Hadoopの上のエラーを発射されたので、私は別の方法を探しています:sys.stdinから最初のN行をPythonの行ごとに取得する方法

for line in fileinput.input(): 
    if(counter>limit): 
     break 

    line = line.strip() 
    print (line) 
    counter +=1 

エラーログ:

Error: java.io.IOException: subprocess exited successfully 
R/W/S=6936/19/0 in:NA [rec/s] out:NA [rec/s] 
minRecWrittenToEnableSkip_=9223372036854775807 HOST=null 
USER=s2132211 
HADOOP_USER=null 
last tool output: |29670 YOU HAVE AATO| 
Broken pipe 
    at org.apache.hadoop.streaming.PipeReducer.reduce(PipeReducer.java:129) 
    at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:444) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:422) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
+0

エラーを表示しますか? 'break'はPython言語の通常の部分であり、青からエラーを起こしてはいけません。 –

+0

ローカルマシンでコードを実行するとBreakが機能しますが、Hadoop Serverではエラーが表示されます。私は今ログをアップロードします –

+0

ああ私の悪い。私はつかまえました。私はあなたの質問を誤解しました。 –

答えて

0

は、まず、どちらかあなたの例では、優れたフォーマットされていない、またはあなたには論理的な誤りがあります。 print(line)およびcounter += 1は、INSIDE forループである必要があります。このダウンを書く

簡単な方法は次のとおりです。今

for counter, line in enumerate(fileinput.input()): 
    if(counter>limit): 
     break 

    line = line.strip() 
    print (line) 

、これが問題、いくつかの質問が解決しない場合。

1)プログラムの出力を見ることができますか(それは実際にはforループのものです)。

2)プログラムがすぐにクラッシュするか、しばらくしてからクラッシュしますか?

+0

、書式設定が正しくありません。私は訂正した。 –

+0

いいえ結果は、ちょうどクラッシュする –

+0

愚かな質問、あなたは前にループを定義しましたか? – Fejs

関連する問題