Snowpark Migration Accelerator: Spark 引用类别

SnowConvert for Spark 根据 Spark 元素映射到 Snowpark 的方式对其进行分类。以下类别描述了每项 Spark 引用的转换方式,包括:

  • SnowConvert 是否可以自动转换

  • 是否有可能在它提供的 Snowpark Also 中实现

  • 转换示例

  • 映射过程的描述

以下部分解释了每种状态类型并提供了示例。

直接

直接转换意味着该函数在 PySpark 和 Snowpark 中的工作方式完全相同,无需修改代码。

  • Snowpark 支持:可用

  • 工具支持:可用

  • Spark 示例:

col("col1")
Copy
  • Snowpark 示例:

col("col1")
Copy

重命名

PySpark 函数在 Snowpark 中有等效函数,但您需要使用不同的函数名称。

  • Snowpark 支持:可用

  • 工具支持:可用

  • Spark 示例:

orderBy("date")
Copy
  • Snowpark 示例:

sort("date")
Copy

辅助函数

备注

从 Spark Conversion Core V2.40.0 开始,不再支持 Python 扩展库。从此版本起,Python Spark 元素将不会被归类为扩展。但是,Snowpark 扩展库中的辅助函数类将继续可用于 Spark Scala。

为解决 Spark 和 Snowpark 功能之间的差异,您可以在扩展文件中创建辅助函数。此辅助函数将与原始 Spark 函数具有相同的签名,可以在需要时从任何文件中调用。扩展库将包含此函数以解决兼容性问题。

有关 Snowpark 扩展库的更多信息,请访问我们的 GitHub 存储库,网址为 https://github.com/Snowflake-Labs/snowpark-extensions (https://github.com/Snowflake-Labs/snowpark-extensions)。

示例包括固定的附加参数和参数顺序的更改。

  • Snowpark 支持:可用

  • 工具支持:可用

  • Spark 示例:

instr(str, substr)
Copy
  • 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
  • Snowpark 示例:

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

WorkAround

当 SMA 无法自动转换 PySpark 元素时,该类别适用,但该工具的文档中提供了记录在案的手动解决方案,可以帮助您完成转换。

  • Snowpark 支持:可用

  • 工具支持:不可用

  • Spark 示例:

instr(str, substr)
Copy
  • Snowpark 示例:

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

NotSupported

当 PySpark 元素因为 Snowflake 中没有匹配的等效项而无法转换时,此类别适用。

  • Snowpark 支持:不可用

  • 工具支持:不可用

  • Spark 示例:

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

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

NotDefined

当工具识别了 PySpark 元素,但由于该元素未包含在工具支持的转换数据库中而无法进行转换时,就会出现此错误。

当 PySpark 元素因为 Snowflake 中没有相应的特性或功能而无法转换时,此类别适用。

  • Snowpark 支持:不可用

  • 工具支持:不可用

  • Spark 示例:不适用

  • Snowpark 示例:不适用

评估结果会将所有检测到的 Spark API 引用分为以下类别。

语言: 中文