首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从spark中的字符串列中提取数字部分?

如何从spark中的字符串列中提取数字部分?
EN

Stack Overflow用户
提问于 2019-05-16 10:59:37
回答 2查看 4.6K关注 0票数 1

我是个新手,正在尝试用数据来练习。我在scala中使用databricks,对于数据集,我使用kaggle的fifa 19完整球员数据集。其中一列名为"Weight“,它包含如下数据

代码语言:javascript
复制
    +------+
    |Weight|
    +------+
    |136lbs|
    |156lbs|
    |136lbs|
    |...   |
    |...   |
    +------+

我想以这样的方式更改列,使其看起来像这样

代码语言:javascript
复制
    +------+
    |Weight|
    +------+
    |136   |
    |156   |
    |136   |
    |...   |
    |...   |
    +------+

有谁可以帮我修改spark sql中的列值吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-16 12:00:51

您可以创建新列并使用regexp_replace

代码语言:javascript
复制
dataFrame.withColumn("Weight2", regexp_replace($"Weight" , lit("lbs"), lit("")))
票数 1
EN

Stack Overflow用户

发布于 2019-05-17 19:25:09

下面是使用正则表达式和regexp_extract内置函数的另一种方法:

代码语言:javascript
复制
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|
+------+----------+-----------+
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56160196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档