PySpark SQL TRY_CAST?
PySpark SQL TRY_CAST?
我在 Dataframe 中有数据,所有列都是字符串。现在,列中的一些数据是数字的,所以我可以转换为浮点数。其他行实际上包含我不想转换的字符串。
所以我一直在寻找类似 try_cast 的东西,并且已经尝试在 .when().otherwise()
上构建一些东西,但到目前为止没有成功。
casted = data.select(when(col("Value").cast("float").isNotNull(), col("Value").cast("float")).otherwise(col("Value")))
这个不行,最后永远投不下去。
这样的事情通常是否可能(以没有 UDF 等的高性能方式)?
在 spark 中不能有包含两种类型的列:float 或 string。这就是为什么您的列总是 string
类型(因为它可以同时包含:字符串和浮点数)。
您的代码所做的是:如果 Value
列中的数字不适合浮点数,它将被转换为浮点数,然后转换为字符串(尝试使用 >6 位小数)。据我所知,TRY_CAST 转换为值或 null(至少在 SQL 服务器中),所以这正是 spark 的 cast
所做的。
我在 Dataframe 中有数据,所有列都是字符串。现在,列中的一些数据是数字的,所以我可以转换为浮点数。其他行实际上包含我不想转换的字符串。
所以我一直在寻找类似 try_cast 的东西,并且已经尝试在 .when().otherwise()
上构建一些东西,但到目前为止没有成功。
casted = data.select(when(col("Value").cast("float").isNotNull(), col("Value").cast("float")).otherwise(col("Value")))
这个不行,最后永远投不下去。
这样的事情通常是否可能(以没有 UDF 等的高性能方式)?
在 spark 中不能有包含两种类型的列:float 或 string。这就是为什么您的列总是 string
类型(因为它可以同时包含:字符串和浮点数)。
您的代码所做的是:如果 Value
列中的数字不适合浮点数,它将被转换为浮点数,然后转换为字符串(尝试使用 >6 位小数)。据我所知,TRY_CAST 转换为值或 null(至少在 SQL 服务器中),所以这正是 spark 的 cast
所做的。