首页 > 解决方案 > 如何从spark中的字符串列中提取数字部分?

问题描述

我是新来的火花并试图用数据来练习。我在scala中使用databricks,对于数据集,我使用来自kaggle的fifa 19完整玩家数据集。名为“重量”的列之一,其中包含看起来像的数据

    +------+
    |Weight|
    +------+
    |136lbs|
    |156lbs|
    |136lbs|
    |...   |
    |...   |
    +------+

我想以这样的方式更改列

    +------+
    |Weight|
    +------+
    |136   |
    |156   |
    |136   |
    |...   |
    |...   |
    +------+

任何人都可以帮助我如何更改 spark sql 中的列值。

标签: scalaapache-spark-sql

解决方案


这是使用 regex 和 regexp_extract 内置函数的另一种方法:

import org.apache.spark.sql.functions.regexp_extract

val df = Seq(
"136lbs",
"150lbs",
"12lbs",
"30kg",
"500kg")
.toDF("weight")

df.withColumn("weight_num", regexp_extract($"weight", "\\d+", 0))
  .withColumn("weight_unit", regexp_extract($"weight", "[a-z]+", 0))
  .show

//Output
+------+----------+-----------+
|weight|weight_num|weight_unit|
+------+----------+-----------+
|136lbs|       136|        lbs|
|150lbs|       150|        lbs|
| 12lbs|        12|        lbs|
|  30kg|        30|         kg|
| 500kg|       500|         kg|
+------+----------+-----------+

推荐阅读