输入数据框:
val ds = Seq((1,34.44),
(2,76.788),
(3,54.822)).toDF("id","mark")
预期输出:
val ds = Seq((1,34),
(2,76),
(3,54)).toDF("id","mark")
我想如上所述从列标记中删除小数部分。我已经搜索了任何内置functions,但未找到任何内容。 udf 应该如何达到上述效果?
答案 0 :(得分:0)
您可以使用cast
到integer
作为
import org.apache.spark.sql.functions._
ds.withColumn("mark", $"mark".cast("integer")).show(false)
应该给您
+---+----+
|id |mark|
+---+----+
|1 |34 |
|2 |76 |
|3 |54 |
+---+----+
我希望答案会有所帮助
更新
您评论为
但是,如果该列中有任何字符串值,则由于我们将其转换为integer,该值将为null。我不想要这种行为
所以我想您的标记列必须为StringType()
,并且您可以使用regexp_replace
import org.apache.spark.sql.functions._
ds.withColumn("mark", regexp_replace($"mark", "(\\.\\d+)", "")).show(false)