所以我使用regex和Spark的列rlike从字符串中提取最后一个数字。问题是,在它提取数字后,它会自动转换为布尔值。有没有办法阻止它自动转换为布尔值?
test.withColumn("Quarter", $"Month".rlike("\\d+$")) 例如:
输入:
2015 Q 1
2015 Q 1
2015 Q 2
2015 Q 2输出:
true
true
true
true预期:1 1 2 2
我尝试将其转换为整数,但它所做的只是返回1,因为它被从Boolean转换为Int。
test.withColumn("Quarter", $"Month".rlike("\\d+$").cast("integer"))发布于 2017-07-26 00:48:30
Spark有一个通过匹配正则表达式来提取的函数,你可以使用regexp_extract函数来实现这一点。
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|
+--------+-------+发布于 2017-07-26 00:49:32
这是预期的行为,rlike是用于过滤的。从org.apache.spark.sql.functions试用regex_extract
df.withColumn("Q", regexp_extract($"month", ".*(\\d)$", 1))或者甚至来自相同包的子字符串在您的情况下可能就足够了:
df.withColumn("Q", substring($"month",7,7))这些列可以转换为您想要的整数(尽管解析要比转换...)
https://stackoverflow.com/questions/45309031
复制相似问题