Python 将音频文件转换为文本

Python 将音频文件转换为文本,python,hadoop,audio,mapreduce,Python,Hadoop,Audio,Mapreduce,我需要在MapReduce上使用.wav音频文件将语音转换为文本。 我搜索了很多,发现很少有java和python库可以帮助我将语音转换为文本。python中的一个这样的库是 使用这个库,我可以将语音转换成文本。现在我试着用这个库编写Python MapReduce来做同样的事情,但是我迷失在中间。我知道我必须编写自定义的唱片阅读器来读取我的音频文件。下面是我编辑并尝试的代码 #!/usr/bin/env python import speech_recognition as sr impor

我需要在MapReduce上使用.wav音频文件将语音转换为文本。 我搜索了很多,发现很少有java和python库可以帮助我将语音转换为文本。python中的一个这样的库是

使用这个库,我可以将语音转换成文本。现在我试着用这个库编写Python MapReduce来做同样的事情,但是我迷失在中间。我知道我必须编写自定义的唱片阅读器来读取我的音频文件。下面是我编辑并尝试的代码

#!/usr/bin/env python

import speech_recognition as sr
import sys


data = read_input(sys.stdin)


r = sr.Recognizer()
with sr.AudioFile(data) as source:
    audio = r.record(source) # read the entire audio file


    print '%s\t%s' % (1,"Sphinx thinks you said " + r.recognize_sphinx(audio))
它无法识别输入。这是我第一次尝试用python编写mapreduce代码,所以我知道我遗漏了很多要点。任何帮助或指导都会很有帮助,因为我被困在这里面了。提前谢谢

下面是我得到的错误日志

16/06/28 08:15:23 WARN streaming.StreamJob: -file option is deprecated, please use generic option -files instead.
packageJobJar: [/opt/python_mapreduce/audio_failure.py] [/usr/hdp/2.4.0.0-169/hadoop-mapreduce/hadoop-streaming-2.7.1.2.4.0.0-169.jar] /tmp/streamjob3856155156594950356.jar tmpDir=null
16/06/28 08:15:30 INFO impl.TimelineClientImpl: Timeline service address: http://sandbox.hortonworks.com:8188/ws/v1/timeline/
16/06/28 08:15:31 INFO client.RMProxy: Connecting to ResourceManager at sandbox.hortonworks.com/192.168.56.102:8050
16/06/28 08:15:33 INFO impl.TimelineClientImpl: Timeline service address: http://sandbox.hortonworks.com:8188/ws/v1/timeline/
16/06/28 08:15:33 INFO client.RMProxy: Connecting to ResourceManager at sandbox.hortonworks.com/192.168.56.102:8050
16/06/28 08:15:35 INFO mapred.FileInputFormat: Total input paths to process : 1
16/06/28 08:15:35 INFO mapreduce.JobSubmitter: number of splits:2
16/06/28 08:15:36 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1467091124614_0002
16/06/28 08:15:37 INFO impl.YarnClientImpl: Submitted application application_1467091124614_0002
16/06/28 08:15:37 INFO mapreduce.Job: The url to track the job: http://sandbox.hortonworks.com:8088/proxy/application_1467091124614_0002/
16/06/28 08:15:37 INFO mapreduce.Job: Running job: job_1467091124614_0002
16/06/28 08:16:02 INFO mapreduce.Job: Job job_1467091124614_0002 running in uber mode : false
16/06/28 08:16:02 INFO mapreduce.Job:  map 0% reduce 0%
16/06/28 08:16:25 INFO mapreduce.Job:  map 100% reduce 0%
16/06/28 08:16:25 INFO mapreduce.Job: Task Id : attempt_1467091124614_0002_m_000001_0, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

Container killed by the ApplicationMaster.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143

16/06/28 08:16:25 INFO mapreduce.Job: Task Id : attempt_1467091124614_0002_m_000000_0, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

Container killed by the ApplicationMaster.
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143

16/06/28 08:16:26 INFO mapreduce.Job:  map 0% reduce 0%
16/06/28 08:16:42 INFO mapreduce.Job: Task Id : attempt_1467091124614_0002_m_000001_1, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

16/06/28 08:16:43 INFO mapreduce.Job: Task Id : attempt_1467091124614_0002_m_000000_1, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

16/06/28 08:17:02 INFO mapreduce.Job: Task Id : attempt_1467091124614_0002_m_000001_2, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

16/06/28 08:17:04 INFO mapreduce.Job: Task Id : attempt_1467091124614_0002_m_000000_2, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

16/06/28 08:17:26 INFO mapreduce.Job:  map 100% reduce 100%
16/06/28 08:17:27 INFO mapreduce.Job: Job job_1467091124614_0002 failed with state FAILED due to: Task failed task_1467091124614_0002_m_000001
Job failed as tasks failed. failedMaps:1 failedReduces:0

16/06/28 08:17:27 INFO mapreduce.Job: Counters: 17
        Job Counters
                Failed map tasks=7
                Killed map tasks=1
                Killed reduce tasks=1
                Launched map tasks=8
                Other local map tasks=6
                Data-local map tasks=2
                Total time spent by all maps in occupied slots (ms)=146997
                Total time spent by all reduces in occupied slots (ms)=0
                Total time spent by all map tasks (ms)=146997
                Total time spent by all reduce tasks (ms)=0
                Total vcore-seconds taken by all map tasks=146997
                Total vcore-seconds taken by all reduce tasks=0
                Total megabyte-seconds taken by all map tasks=36749250
                Total megabyte-seconds taken by all reduce tasks=0
        Map-Reduce Framework
                CPU time spent (ms)=0
                Physical memory (bytes) snapshot=0
                Virtual memory (bytes) snapshot=0
16/06/28 08:17:27 ERROR streaming.StreamJob: Job not successful!
Streaming Command Failed!
我正在使用下面的脚本运行作业

hadoop jar /usr/hdp/2.4.0.0-169/hadoop-mapreduce/hadoop-streaming.jar -file /opt/python_mapreduce/audio_failure.py    -mapper /opt/python_mapreduce/audio_failure.py -input  /python/audiofile/* -output /python/count/19/
甚至尝试将减速器的数量设置为0

hadoop jar /usr/hdp/2.4.0.0-169/hadoop-mapreduce/hadoop-streaming.jar -file /opt/python_mapreduce/audio_failure.py    -mapper /opt/python_mapreduce/audio_failure.py -numReduceTasks 0 -input  /python/audiofile/* -output /python/count/19/

read\u输入
行似乎多余,并且至少包含一个语法错误。除之外的
行似乎也有缩进错误。请让您的代码编译,并演示您的问题。不管怎么说,现在还不清楚你在问什么——为什么在MapReduce下读取文件会有所不同?嗨,Truplee,谢谢你指出。我一点也不擅长python,因为这是我第一次使用它。我也在更新错误日志。你是如何运行作业的?你真的要将文件名作为标准输入传递给它吗?嗨,Tripleee,很抱歉,我已经更新了用于运行此作业的脚本。我现在使用的只是映射器作业。
read\u输入
行似乎多余,并且至少包含一个语法错误。除
之外的
行似乎也有缩进错误。请让您的代码编译,并演示您的问题。不管怎么说,现在还不清楚你在问什么——为什么在MapReduce下读取文件会有所不同?嗨,Truplee,谢谢你指出。我一点也不擅长python,因为这是我第一次使用它。我也在更新错误日志。你是如何运行作业的?你真的要将文件名作为标准输入传递给它吗?嗨,Tripleee,很抱歉,我已经更新了用于运行此作业的脚本。我现在正在使用的只是地图绘制工作。