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 所做的。