Snowpark Migration Accelerator : Catégories de référence Spark

SnowConvert pour Spark classe les éléments Spark en fonction de la manière dont ils peuvent être mappés à Snowpark. Les catégories suivantes décrivent la manière dont chaque référence Spark est traduite, y compris :

  • Si SnowConvert peut la convertir automatiquement

  • S’il est possible de la mettre en œuvre dans Snowpark. Il fournit également :

  • Des exemples de traduction

  • Une description du processus de mappage

Les sections ci-dessous expliquent chaque type de statut et fournissent des exemples.

Direct

La traduction directe signifie que la fonction fonctionne exactement de la même manière dans PySpark et Snowpark, sans aucune exigence de modification du code.

  • Prise en charge Snowpark : disponible

  • Prise en charge de l’outil : disponible

  • Exemple Spark :

col("col1")
Copy
  • Exemple Snowpark :

col("col1")
Copy

Renommer

La fonction PySpark a un équivalent dans Snowpark, mais vous devez utiliser un nom de fonction différent.

  • Prise en charge Snowpark : disponible

  • Prise en charge de l’outil : disponible

  • Exemple Spark :

orderBy("date")
Copy
  • Exemple Snowpark :

sort("date")
Copy

Assistant

Note

À partir de Spark Conversion Core V2.40.0, la bibliothèque d’extensions Python n’est plus prise en charge. Les éléments Spark Python ne seront plus classés comme des extensions à partir de cette version. Cependant, les classes d’assistant de la bibliothèque d’extensions Snowpark continueront d’être disponibles pour Spark Scala.

Pour pallier la différence entre les fonctionnalités de Spark et de Snowpark, vous pouvez créer une fonction d’aide dans un fichier d’extension. Cette fonction d’aide aura la même signature que la fonction Spark d’origine et pourra être appelée à partir de n’importe quel fichier si nécessaire. La bibliothèque d’extensions contiendra cette fonction pour résoudre le problème de compatibilité.

Pour plus d’informations sur la bibliothèque d’extensions Snowpark, consultez notre référentiel GitHub à l’adresse https://github.com/Snowflake-Labs/snowpark-extensions.

Il peut s’agir, par exemple, de la correction de paramètres supplémentaires ou de la modification de l’ordre des paramètres.

  • Prise en charge Snowpark : disponible

  • Prise en charge de l’outil : disponible

  • Exemple Spark :

instr(str, substr)
Copy
  • Exemple Snowpark :

# creating a helper function named instr with an 
# identical signature as the pyspark function, like:

def instr(source: str, substr: str) -> str:
    """
    Returns the position of a substring within a source string.
    Similar to the CHARINDEX function in SQL.
    
    Args:
        source: The string to search in
        substr: The string to search for
        
    Returns:
        The position where the substring is found, or 0 if not found
    """
    return charindex(substr, str)

## Transformation

The function is rebuilt in Snowpark to achieve the same results as the original, though it may look different. The new version might use multiple functions or additional code lines to accomplish the same task.

* Snowpark Support: Yes
* Tool Support: Yes
* Spark Example:

```{code} python
:force:
col1 = col("col1")
col2 = col("col2")
col1.contains(col2)
Copy
  • Exemple Snowpark :

col1 = col("col1")
col2 = col("col2")
from snowflake.snowpark.functions as f
f.contains(col, col2)
Copy

WorkAround

Cette catégorie s’applique lorsque SMA ne peut pas convertir automatiquement un élément PySpark, mais qu’il existe une solution manuelle documentée dans la documentation de l’outil pour vous aider à effectuer la conversion.

  • Prise en charge Snowpark : disponible

  • Prise en charge de l’outil : non disponible

  • Exemple Spark :

instr(str, substr)
Copy
  • Exemple Snowpark :

#EWI: SPRKPY#### => pyspark function has a workaround, see documentation for more info
charindex(substr, str)
Copy

NotSupported

Cette catégorie s’applique lorsqu’un élément PySpark ne peut pas être converti car il n’y a pas d’équivalent dans Snowflake.

  • Prise en charge Snowpark : non disponible

  • Prise en charge de l’outil : non disponible

  • Exemple Spark :

df:DataFrame = spark.createDataFrame(rowData, columns)
df.alias("d")
Copy
  • Exemple Snowpark :

df:DataFrame = spark.createDataFrame(rowData, columns)
# EWI: SPRKPY11XX => DataFrame.alias is not supported
# df.alias("d")
Copy

NotDefined

Cette erreur se produit lorsque l’outil identifie un élément PySpark mais ne peut pas le convertir car l’élément n’est pas inclus dans la base de données de conversion prise en charge par l’outil.

Cette catégorie s’applique lorsqu’un élément PySpark ne peut pas être converti car il n’existe pas de fonction ou de fonctionnalité correspondante dans Snowflake.

  • Prise en charge Snowpark : non disponible

  • Prise en charge de l’outil : non disponible

  • Exemple Spark : Non applicable

  • Exemple Snowpark : Non applicable

Les résultats de l’évaluation permettront de classer toutes les références Spark API détectées dans les catégories suivantes.