Несколько регулярных выражений заменить вместе в Scala - PullRequest
0 голосов
/ 24 января 2019

Я получаю в качестве входных данных для функции в scala фрейм данных, в котором есть столбец с именем vin .Столбец имеет значения в следующем формате

1. UJ123QR8467
2. 0UJ123QR846
3. /UJ123QR8467
4. -UJ123QR8467

и т. Д.

Требуется очистить столбец vin на основе следующих правил.

1. replace **"/_-** as ""
2. replace first 0 as ""
3. if the value is more than 10 characters then make the value as NULL.

Я хотел бы знать, есть ли какой-либо упрощенный способ достижения вышеизложенного.Я могу думать только о том, чтобы делать несколько .withcolumn во время замены регулярных выражений каждый раз.

1 Ответ

0 голосов
/ 24 января 2019

Я бы объединил все Regex связанные изменения в одном преобразовании и условие length в другом, как показано ниже:

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

val df = Seq(
  "UJ123QR8467", "0UJ123QR846", "/UJ123QR8467",
  "-UJ123QR8467", "UJ0123QR84", "UJ123-QR_846"
).toDF("vin")

df.
  withColumn("vin2", regexp_replace($"vin", "^[0]|[/_-]", "")).
  withColumn("vin2", when(length($"vin2") <= 10, $"vin2")).
  show
// +------------+----------+
// |         vin|      vin2|
// +------------+----------+
// | UJ123QR8467|      null|
// | 00UJ123QR84|0UJ123QR84|
// |/UJ123QR8467|      null|
// |-UJ123QR8467|      null|
// |  UJ0123QR84|UJ0123QR84|
// |UJ123-QR_846|UJ123QR846|
// +------------+----------+

Обратите внимание, что я немного расширил образец набора данных, чтобы покрыть еготакие случаи как не ведущие 0, [/_-].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...