Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python上逐行从sys.stdin获取前N行_Python_Hadoop_Mapreduce - Fatal编程技术网

如何在Python上逐行从sys.stdin获取前N行

如何在Python上逐行从sys.stdin获取前N行,python,hadoop,mapreduce,Python,Hadoop,Mapreduce,我在为MapReduce编写reducer时遇到了一个问题。 我想得到非常大的文件的前10行,我用于循环和中断。但是,一个break命令在hadoop上触发了一个错误,所以我正在寻找另一种方法: for line in fileinput.input(): if(counter>limit): break line = line.strip() print (line) counter +=1 错误日志: Error: java.io.I

我在为MapReduce编写reducer时遇到了一个问题。 我想得到非常大的文件的前10行,我用于循环和中断。但是,一个break命令在hadoop上触发了一个错误,所以我正在寻找另一种方法:

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)

首先,要么您的示例格式不好,要么您有一个逻辑错误。
打印(行)
计数器+=1
应位于for循环的内部

更简单的方法是:

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

    line = line.strip()
    print (line)
现在,如果这不能解决问题,那么就没有几个问题了

1) 你能看到程序的输出吗(它实际上是在为循环打印什么东西吗)


2) 程序是立即崩溃还是在一段时间后崩溃?

首先,您的示例格式不正确,或者您有逻辑错误。
打印(行)
计数器+=1
应位于for循环的内部

更简单的方法是:

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

    line = line.strip()
    print (line)
现在,如果这不能解决问题,那么就没有几个问题了

1) 你能看到程序的输出吗(它实际上是在为循环打印什么东西吗)


2) 程序是立即崩溃还是在一段时间后崩溃?

您能显示错误吗
break
是Python语言的正常部分,不应该只是突然出现错误。当我在本地机器上运行代码时,break起作用,但在Hadoop服务器中,它显示错误。我现在就上传日志哦,糟了。我明白了。我误解了你的问题。对不起,我添加了另一个日志。现在,它被更新了。你能显示错误吗
break
是Python语言的正常部分,不应该只是突然出现错误。当我在本地机器上运行代码时,break起作用,但在Hadoop服务器中,它显示错误。我现在就上传日志哦,糟了。我明白了。我误解了你的问题。对不起,我添加了另一个日志。现在,它被更新了。愚蠢的问题,你们在循环之前定义了计数器吗?愚蠢的问题,你们在循环之前定义了计数器吗?