Исключить алфавит и специальный символ из строки Alphanumeri c в Spark Scala - PullRequest
0 голосов
/ 15 января 2020

Как мы можем исключить весь алфавит из строки, сохраняя только значение цифры c в отдельном столбце, используя spark 2.0 с scala.

Вход

  "ActivalteTime": "PT5M", 
  "ReActivalteTime": "xy20$", 

Выход

  "NewActivalteTime": "5", 
  "NewReActivalteTime": "20", 

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Вот немного обобщенный подход для обработки произвольного списка столбцов, которые должны быть извлечены для содержимого нумерации c с использованием regexp_extract:

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

val df = Seq(
  (1, "A", "PT5M", "xy20$", "M100.1!"),
  (2, "B", "QU6N", "uv%", "N200.2&")
).toDF("C1", "C2", "C3", "C4", "C5")

val colsToExtract = Seq("C3", "C4", "C5")
val colsRemained = df.columns diff colsToExtract

val prefix = "New"

df.select(colsRemained.map(col) ++ colsToExtract.map(c =>
    regexp_extract(col(c), "([0-9.]+)", 1).as(s"${prefix}$c")): _*
  ).show
// +---+---+-----+-----+-----+
// | C1| C2|NewC3|NewC4|NewC5|
// +---+---+-----+-----+-----+
// |  1|  A|    5|   20|100.1|
// |  2|  B|    6|     |200.2|
// +---+---+-----+-----+-----+
0 голосов
/ 15 января 2020

Используйте функцию Regexp_extract для извлечения только цифр из строки.

val df=Seq((""""ActivalteTime": "PT5M","""),(""""ReActivalteTime": "xy20$",""")).toDF("text")

df.show(false)

Результат:

+---------------------------+
|text                       |
+---------------------------+
|"ActivalteTime": "PT5M",   |
|"ReActivalteTime": "xy20$",|
+---------------------------+

Использование Regexp_extract:

df.withColumn("num",regexp_extract($"text","(\\d+)",1)).show(false)

+---------------------------+---+
|text                       |num|
+---------------------------+---+
|"ActivalteTime": "PT5M",   |5  |
|"ReActivalteTime": "xy20$",|20 |
+---------------------------+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...