如何将 .wav 文件目录添加到 Kedro 数据目录?

时间:2021-01-26 11:22:32

标签: amazon-s3 kedro

这是我第一次尝试使用 Kedro 包。

我在 s3 存储桶中有一个 .wav 文件列表,我很想知道如何在 Kedro 数据目录中提供它们。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为目前没有处理 .wav 文件的数据集格式。您需要构建一个使用 custom dataset 之类的 Wave - 不像听起来那么工作!

这将使您能够在目录中执行以下操作:

dataset:
  type: my_custom_path.WaveDataSet
  filepath: path/to/individual/wav_file.wav # this can be a s3://url

然后您就可以在您的 Kedro 管道中以本机方式访问您的 WAV 数据。您可以为您拥有的每个 .wav 文件执行此操作。

如果您希望能够访问包含 wav 文件的整个文件夹,您可能需要探索“包装器”数据集的概念,例如 PartitionedDataSet,其 usage guide 可以在文档。

答案 1 :(得分:0)

这有效:

import pandas as pd

from pathlib import Path, PurePosixPath
from kedro.io import AbstractDataSet


class WavFile(AbstractDataSet):
    '''Used to load a .wav file'''
    
    def __init__(self, filepath):
        self._filepath = PurePosixPath(filepath)

    def _load(self) -> pd.DataFrame:
        df = pd.DataFrame({'file': [self._filepath],
                           'data': [load_wav(self._filepath)]})     
        return df
    

    def _save(self, df: pd.DataFrame) -> None:
        df.to_csv(str(self._filepath))

    def _exists(self) -> bool:
        return Path(self._filepath.as_posix()).exists()

    def _describe(self):
        return dict(filepath=self._filepath)
    
    
class WavFiles(PartitionedDataSet):
    '''Replaces the PartitionedDataSet.load() method to return a DataFrame.'''

    def load(self)->pd.DataFrame:
        '''Returns dataframe'''
        dict_of_data = super().load()
        
        df = pd.concat(
            [delayed() for delayed in dict_of_data.values()]
        )
        
        return df
    
    
my_partitioned_dataset = WavFiles(
    path="path/to/folder/of/wav/files/",
    dataset=WavFile,
)
     
my_partitioned_dataset.load()