Как извлечь числовую часть из строкового столбца в спарк? - PullRequest
1 голос
/ 16 мая 2019

Я новичок в разжигании и пытаюсь поиграть с данными, чтобы получить тренировку. Я использую блоки данных в scala, а для набора данных я использую полный набор данных fifa 19 от kaggle. один из столбцов с именем «Вес», который содержит данные, которые выглядят как

    +------+
    |Weight|
    +------+
    |136lbs|
    |156lbs|
    |136lbs|
    |...   |
    |...   |
    +------+

Я хочу изменить столбец таким образом, чтобы он выглядел следующим образом

    +------+
    |Weight|
    +------+
    |136   |
    |156   |
    |136   |
    |...   |
    |...   |
    +------+

Может ли кто-нибудь помочь, как я могу изменить значения столбца в спарк sql.

Ответы [ 2 ]

2 голосов
/ 17 мая 2019

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

import org.apache.spark.sql.functions.{regexp_extract}

val df = Seq(
"136lbs",
"150lbs",
"12lbs",
"30kg",
"500kg")
.toDF("weight")

df.withColumn("weight_num", regexp_extract($"weight", "\\d+", 0))
  .withColumn("weight_unit", regexp_extract($"weight", "[a-z]+", 0))
  .show

//Output
+------+----------+-----------+
|weight|weight_num|weight_unit|
+------+----------+-----------+
|136lbs|       136|        lbs|
|150lbs|       150|        lbs|
| 12lbs|        12|        lbs|
|  30kg|        30|         kg|
| 500kg|       500|         kg|
+------+----------+-----------+
1 голос
/ 16 мая 2019

Вы можете создать новый столбец и использовать regexp_replace

dataFrame.withColumn("Weight2", regexp_replace($"Weight" , lit("lbs"), lit("")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...