Как добавить каталог с файлами .wav в каталог данных Kedro?

Я впервые пытаюсь использовать пакет Kedro.

У меня есть список файлов .wav в корзине s3, и я очень хочу знать, как сделать их доступными в каталоге данных Kedro.

Есть предположения?


person Myccha    schedule 26.01.2021    source источник


Ответы (2)


Я не верю, что в настоящее время существует формат набора данных, который обрабатывает .wav файлы. Вам нужно будет создать собственный набор данных, который использует что-то вроде Wave - не так много работы, как кажется!

Это позволит вам сделать что-то подобное в своем каталоге:

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

и затем вы можете получить доступ к своим WAV-данным непосредственно в конвейере Kedro. Вы можете сделать это для каждого .wav файла, который у вас есть.

Если вы хотите иметь доступ к целым папкам с файлами wav, вы можете изучить понятие набора данных оболочки, например PartitionedDataSet, руководство по использованию можно найти в документации.

person Zain Patel    schedule 26.01.2021

Это сработало:

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()

person Myccha    schedule 26.01.2021
comment
В целом это работает, но почему бы просто не отбросить PartitionedDataSet и позволить WavFile.load принять каталог (либо исключительно, либо вы можете указать файл каталога v / s)? - person Zain Patel; 28.01.2021
comment
Да, я так и сделал в конце + некоторая логика, чтобы разобраться с подключением s3. - person Myccha; 29.01.2021
comment
Рассматривали ли вы использование fsspec, как и остальные наборы данных Kedro, автоматически позаботится о подключении S3 в фоновом режиме (и любых других удаленных файловых системах!)? - person Zain Patel; 29.01.2021
comment
Я не делал, но это хорошая идея. Я посмотрю. - person Myccha; 22.02.2021