我有一个带有Salary列的spark dataFrame,如下所示:
|Salary|
|"100"|
|"200"|
|"abc"|
dafault数据类型为字符串。我想把它转换成Integer,去掉那些导致解析问题的行。
所需输出
|Salary|
|100|
|200|
有人能告诉我过滤将导致数据类型解析问题的行的代码吗。提前谢谢。
您可以使用正则表达式过滤所需字段,然后强制转换列:
import org.apache.spark.sql.types._
df.filter(row => row.getAs[String]("Salary").matches("""d+"""))
.withColumn("Salary", $"Salary".cast(IntegerType))
如果你不喜欢regex:,也可以使用Try
import scala.util._
df.filter(row => Try(row.getAs[String]("Salary").toInt).isSuccess)
.withColumn("Salary", $"Salary".cast(IntegerType))