> For the complete documentation index, see [llms.txt](https://cleyrop.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cleyrop.gitbook.io/docs/projet-data-and-ia/dataflow/utiliser-des-modules.md).

# Utiliser des Modules

Les **Modules** permettent de factoriser et partager du code commun entre plusieurs Dataflows d’un même projet. Ils contiennent des **fonctions Python** (ou PySpark) que vous pouvez importer directement dans vos transformations. C’est un moyen simple de mutualiser les règles de calcul, dictionnaires, connecteurs ou traitements récurrents.

***

## Types de modules disponibles

Il existe deux types de modules :

<table><thead><tr><th width="208.859375">Type</th><th width="143.89453125">Langage</th><th>Utilisation</th></tr></thead><tbody><tr><td>Module Python</td><td>Python</td><td>Pour les Dataflows de type Python.</td></tr><tr><td>Module PySpark</td><td>PySpark</td><td>Pour les Dataflows de type Spark (Spark / pandas-on-Spark / SQL).</td></tr></tbody></table>

{% hint style="warning" %}
Un module ne peut être utilisé que dans un **Dataflow du même type**.

Un module Python ne peut pas être importé dans un Dataflow Spark, et inversement.
{% endhint %}

## Créer un module

1. Dans le menu Dataflow, onglet `Module`
2. Cliquez sur `Créer`.
3. Saisissez un **nom** respectant les règles
4. Choisissez le **type**

## Modifier le contenu d’un module

1. Sélectionnez votre module dans la liste des modules.
2. Rédigez ou collez le code Python dans l’éditeur.
3. Cliquez sur **Sauvegarder** pour enregistrer vos changements.
4. Cliquez sur **Déployer** pour rendre la nouvelle version du module disponible dans le projet.

### **Exemple de module Python**

{% code title="module example" %}

```python
# utils_math

def normalize_column(df, column):
    """
    Normalise une colonne numérique entre 0 et 1
    """
    min_val = df[column].min()
    max_val = df[column].max()
    df[column] = (df[column] - min_val) / (max_val - min_val)
    return df


def compute_ratio(a, b):
    return a / b if b != 0 else None
```

{% endcode %}

Vous pouvez ensuite l’utiliser dans vos transformations Python :

```python
from utils_math import normalize_column, compute_ratio

df = normalize_column(df, "prix")
df = df.with_columns({"ratio": compute_ratio(df["revenu"], df["charges"])})
return df
```

## Déploiement et versionnement

Chaque fois qu’un module est **déployé**, toutes les **prochaines exécutions** des Dataflows qui l’utilisent seront automatiquement mises à jour avec la **nouvelle version du module**.

* Cela crée une **nouvelle version** pour chaque Dataflow concerné.
* Les Dataflows existants conservent leur historique d’exécution, mais leurs prochaines exécutions utiliseront le code mis à jour.

{% hint style="warning" %}
Le processus de mise à jour est **asynchrone** il peut y avoir quelques secondes pour rendre le module disponible pour tous les utilisateurs du projet.
{% endhint %}

***

## Bonnes pratique

* Avant de déployer un module, il est recommandé de le tester dans un Dataflow de test pour éviter d’impacter plusieurs traitements en production.
* Nommez vos modules selon leur fonction (utils\_text, rules\_finance, parser\_api).
* Commentez vos fonctions pour faciliter la réutilisation par d’autres membres de l’équipe.
* Évitez les dépendances externes non installées sur le cluster : utilisez uniquement les librairies disponibles par défaut.
* Si un module doit évoluer sans impacter la production, dupliquez-le sous un nouveau nom (ex. utils\_text\_v2).
