Использование содержит внутри когда предложение для Spark Data Frame - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующее рабочее заявление для DS и DF:

val ds2 = ds.withColumn("new_telnum", when(expr("substring(telnum,1,2)") === "91" || expr("substring(telnum,1,2)") === "01", expr("substring(telnum,3,length(telnum)-2)")).otherwise(col("telnum")))

Но я не могу преобразовать выражение when, чтобы использовать List с конструкцией contains для замены or.

1 Ответ

0 голосов
/ 05 сентября 2018

Я бы предложил использовать isin , как в следующем примере:

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

val ds = Seq(
  ("012223334444"),
  ("1112223333"),
  ("913334445555"),
  ("884445556666")
).toDF("telnum").as[(String)]

val codeList = List("91", "01")

ds.withColumn( "new_telnum", when( substring($"telnum", 1, 2).isin(codeList: _*),
    expr("substring(telnum, 3, length(telnum) - 2)")
  ).otherwise($"telnum")
).show
// +------------+------------+
// |      telnum|  new_telnum|
// +------------+------------+
// |012223334444|  2223334444|
// |  1112223333|  1112223333|
// |913334445555|  3334445555|
// |884445556666|884445556666|
// +------------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...