我是 Apache Spark 的新手,我正在使用 Scala 來處理它。
我有一些疑問,其中之一是在我的示例中如何使用 case。我必須使用分布式系統,我要做的是對一些實體進行分類。為此,我有一個 DataFrame,您可以在這里看到:
-------------------- ------------
| group | info |
-------------------- ------------
|gr=nat, dfn | x1betdfn |
|gr=pjc, ntp | x2b1trkn |
|gr=ntp, ntt | x3b2td3n |
-------------------- ------------
因此,通過名為groupI的列,我必須過濾或執行正則運算式以僅獲取gr=(可能是nat,pjc或ntp)之后的三個字母,然后將其寫在新列中。
執行此操作的最有效方法是什么?
這就是我正在做的:
val df2 =
df.withColumn("tgroup", when(col("group").match === "nat", "nat_1_nm")
.when(col("group").match === "pjc", "pjc_determined")
.when(col("group").match === "ntp", "ntp_dway")
.otherwise("Unknown"))
但不作業。我試圖得到這個:
-------------------- ------------ ----------------
| group | info | |
-------------------- ------------ ----------------
|gr=nat, dfn | x1betdfn | nat_1_nm |
|gr=pjc, ntp | x2b1trkn | pjc_determined |
|gr=e2p, ntt | x3b2td3n | Unknown |
|gr=ntp, ntt | x3b2td3n | ntp_dway |
-------------------- ------------ ----------------
我究竟做錯了什么?提前致謝。
uj5u.com熱心網友回復:
嘗試使用 rlike 做這樣的事情。只需構建您自己的正則運算式:
val df2 =
df.withColumn("tgroup",when(col("group").rlike("(?i)^*nat,\\s[a-zA-Z]*$"), "nat_1_nm").
otherwise(when(col("group").rlike("(?i)^*pjc,\\s[a-zA-Z]*$"), "pjc_determined").
otherwise(when(col("group").rlike("(?i)^*ntp,\\s[a-zA-Z]*$"), "ntp_dway").otherwise("Unknown"))))
我用一個例子試了一下,我得到了你的預期輸出:
import spark.implicits._
val df = Seq(
("gr=nat, dfn"),
("gr=pjc, ntp"),
("gr=e2p, ntt"),
("gr=ntp, ntt")
).toDF("group")
uj5u.com熱心網友回復:
如果group列的值始終為形式gr=XXX,則使用startsWith方法在您的情況下就足夠了:
val df2 = df.withColumn(
"tgroup",
when(col("group").startsWith("gr=nat"), "nat_1_nm")
.when(col("group").startsWith("gr=pjc"), "pjc_determined")
.when(col("group").startsWith("gr=ntp"), "ntp_dway")
.otherwise("Unknown")
)
df2.show
// ----------- -------- --------------
//| group| info| tgroup|
// ----------- -------- --------------
//|gr=nat, dfn|x1betdfn| nat_1_nm|
//|gr=pjc, ntp|x2b1trkn|pjc_determined|
//|gr=e2p, ntt|x3b2td3n| Unknown|
//|gr=ntp, ntt|x3b2td3n| ntp_dway|
// ----------- -------- --------------
您可能還想XXX在gr=使用regexp_extract函式后提取值:
val df2 = df.withColumn(
"tgroup",
regexp_extract(col("group"), "^gr=(.{3}),.*", 1)
).withColumn(
"tgroup",
when(col("tgroup") === "nat", "nat_1_nm")
.when(col("tgroup") === "pjc", "pjc_determined")
.when(col("tgroup") === "ntp", "ntp_dway")
.otherwise("Unknown")
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360768.html
