2017-07-25 9 views
1

これで、Sparkの列rlikeでregexを使用して、文字列の最後の桁を抽出しています。問題は、数字を抽出した後、自動的にブール値に変換されることです。自動的にBooleanに変換されないようにする方法はありますか?例えばSpark column rlike intをbooleanに変換します

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

私は整数にした後、それをキャストしようとしたが、それは、Dすべてoesは、BooleanからIntに変換されるため、1を返します。

test.withColumn("Quarter", $"Month".rlike("\\d+$").cast("integer")) 
+0

'。四捨五入("四半期 "、regexp_replace( '月"、*(\\ d +)$ "、" $ 1 "))')を試してみてください。 –

+0

あなたの問題を解決する答えがありますか?それを受け入れてください –

答えて

0

スパークは、正規表現を照合することによって抽出する機能を持っている、あなたはこのために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| 
+--------+-------+ 
0

これは、予想される動作です。rlikeはフィルタリング用です。あなたのケースで十分かもしれ同じパッケージから部分org.apache.spark.sql.functions

df.withColumn("Q", regexp_extract($"month", ".*(\\d)$", 1)) 

かさえからregex_extractをお試しください:

df.withColumn("Q", substring($"month",7,7)) 

これらの列は、あなたが望むの整数にキャストすることができます(というよりも、解析しているが、キャスト...)

関連する問題