[英]Pyspark: Use ffmpeg on the driver and workers
我正在尝试在我的 Spark 集群(在 Databricks 中)处理一批音频文件。 我有一个安装 ffmpeg (带有apt
)和 pydub (带有pip
)的初始化脚本。
我有一个要处理的文件路径的数据框,当我调用打开/处理/导出的 UDF 时,有时会出现以下错误:
pydub.exceptions.CouldntEncodeError: Encoding failed. ffmpeg/avlib returned error code: 1
...
[wav @ 0x1e1b4c0] Could not find codec parameters for stream 0
(Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 1 channels, 768 kb/s): unspecified sample format
也就是说,我使用pydub的UDF可以正确处理某些文件,但对于其他文件则失败。 我检查了file
命令,所有这些 MP3 文件似乎都具有相同的配置/编解码器。 所以我认为 pyspark 将我的数据框中的“行”分发给驱动程序和工作人员,但只有驱动程序具有 ffmpeg。 所以我的工作人员处理的所有文件都失败了。
我的假设正确吗?
我该如何解决这个问题? 我也不知道如何:
init Scripts
在所有节点上安装 ffmpeg,它是 pydub 的依赖项。 这可以通过在 databricks 单元格中使用以下代码来实现dbutils.fs.mkdirs("dbfs:/databricks/scripts/") #create a new dir
dbutils.fs.put("/databricks/scripts/installffmpeg.sh",
"""
#!/bin/bash
sudo apt-get update
sudo apt-get -y install ffmpeg
""", True) #create an init script into the newly created dir
然后转到 Clsusters -> Edit -> Advanced Options - Init Scripts 将目录添加到文件路径
Confirm
现在 ffmpeg 将在您启动集群时安装
点击install
完毕!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.