Snowpark中使用TRY_CAST转换split结果报错,如何解决?
问题
尝试对值为"1.419000"的列执行TRY_CAST操作,先通过df.select(split(col("spc_value"),lit("~"))[0])拆分列,已导入以下依赖:
from snowflake.snowpark.types import StructType, StructField, StringType, IntegerType, FloatType, DecimalType, DoubleType, VariantType from snowflake.snowpark.functions import col,lit,split,try_cast
分别使用两种方式尝试转换:
- functions.try_cast方式:
df.select(try_cast(split(col("spc_value"),lit("~"))[0],DoubleType()))
- Column.try_cast方式:
df.select(split(col("spc_value"),lit("~"))[0].try_cast(DoubleType()))
两种方式均返回报错:
SQL compilation error:
Function TRY_CAST cannot be used with arguments of types VARIANT and FLOAT
请问使用TRY_CAST时遗漏了什么?
解决方法
报错核心原因是split函数返回的结果类型为VARIANT,Snowflake不支持直接将VARIANT类型通过TRY_CAST转换为FLOAT/Double类型。
只需先将split后的VARIANT值显式转换为字符串类型,再执行TRY_CAST即可解决:
方式一:使用functions.try_cast
df.select(try_cast(split(col("spc_value"), lit("~"))[0].cast(StringType()), DoubleType()))
方式二:使用Column.try_cast链式调用
df.select(split(col("spc_value"), lit("~"))[0].cast(StringType()).try_cast(DoubleType()))
通过新增cast(StringType())步骤,将VARIANT类型转为字符串,消除类型转换限制后,就能正常执行TRY_CAST转为Double类型。
内容的提问来源于stack exchange,提问作者axiom
相关产品推荐
相关产品推荐

