首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark列rlike将int转换为boolean

Spark列rlike将int转换为boolean
EN

Stack Overflow用户
提问于 2017-07-26 00:34:37
回答 2查看 906关注 0票数 1

所以我使用regex和Spark的列rlike从字符串中提取最后一个数字。问题是,在它提取数字后,它会自动转换为布尔值。有没有办法阻止它自动转换为布尔值?

代码语言:javascript
复制
test.withColumn("Quarter", $"Month".rlike("\\d+$")) 

例如:

输入:

代码语言:javascript
复制
2015 Q 1
2015 Q 1
2015 Q 2
2015 Q 2

输出:

代码语言:javascript
复制
true
true
true
true

预期:1 1 2 2

我尝试将其转换为整数,但它所做的只是返回1,因为它被从Boolean转换为Int。

代码语言:javascript
复制
test.withColumn("Quarter", $"Month".rlike("\\d+$").cast("integer"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-26 00:48:30

Spark有一个通过匹配正则表达式来提取的函数,你可以使用regexp_extract函数来实现这一点。

代码语言:javascript
复制
scala> val df = Seq("2015 Q 1", "2015 Q 1", "2015 Q 2", "2015 Q 2").toDF("col1") 
df: org.apache.spark.sql.DataFrame = [col1: string]

scala> import org.apache.spark.sql.functions._
import org.apache.spark.sql.functions._

scala> df.withColumn("Quarter",regexp_extract($"col1", ".*(\\d+)$", 1)).show

+--------+-------+
|    col1|Quarter|
+--------+-------+
|2015 Q 1|      1|
|2015 Q 1|      1|
|2015 Q 2|      2|
|2015 Q 2|      2|
+--------+-------+
票数 0
EN

Stack Overflow用户

发布于 2017-07-26 00:49:32

这是预期的行为,rlike是用于过滤的。从org.apache.spark.sql.functions试用regex_extract

代码语言:javascript
复制
df.withColumn("Q", regexp_extract($"month", ".*(\\d)$", 1))

或者甚至来自相同包的子字符串在您的情况下可能就足够了:

代码语言:javascript
复制
df.withColumn("Q", substring($"month",7,7))

这些列可以转换为您想要的整数(尽管解析要比转换...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45309031

复制
相关文章

相似问题

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