我在 Dataframe 中有数据,所有列都是字符串。现在,列中的一些数据是数字,所以我可以转换为浮点数。其他行实际上包含我不想转换的字符串。
所以我一直在寻找像 try_cast 这样的东西,并且已经尝试在上面构建一些东西,.when().otherwise()
但到目前为止没有成功。
casted = data.select(when(col("Value").cast("float").isNotNull(), col("Value").cast("float")).otherwise(col("Value")))
这是行不通的,它永远不会在最后施放。
这样的事情通常是可能的(以没有 UDF 等的高性能方式)?
spark 中不能有两种类型的列:浮点数或字符串。这就是为什么您的列始终具有string
类型(因为它可以同时包含:字符串和浮点数)。
您的代码所做的是:如果Value
列中的数字不适合浮点数,它将被转换为浮点数,然后转换为字符串(尝试使用 >6 位小数)。据我所知 TRY_CAST 转换为 value 或 null(至少在 SQL Server 中),所以这正是 sparkcast
所做的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句