繁体   English   中英

Pyspark:在驱动程序和工人上使用 ffmpeg

[英]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。 所以我的工作人员处理的所有文件都失败了。

我的假设正确吗?

我该如何解决这个问题? 我也不知道如何:

  • 仅在驱动程序上进行处理(具有所有要求)
  • 在工人上也安装 ffmpeg
  1. 首先,需要使用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 将目录添加到文件路径在此处输入图片说明

  1. 选择Confirm

现在 ffmpeg 将在您启动集群时安装

  1. 转到库,安装 New,在此处键入您的 pydub 包和版本: 在此处输入图片说明

点击install

完毕!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM