Как извлечь конкретную строку из столбца значения в фрейме данных - PullRequest
1 голос
/ 15 мая 2019

Мне нужно извлечь метку времени из столбца значений

Я попытался сделать getItem, но ничего не возвращает

val data = df.withColumn("splitted", split($"value", "/"))
      .select($"splitted".getItem(6).alias("region"), $"splitted".getItem(7).alias("service"), col("value"))
      .withColumn("service_type", regexp_extract($"service", """.*(Inbound|Outbound|Outound).*""", 1))
      .withColumn("region_type", concat(
        when(col("region").isNotNull, col("region")).otherwise(lit("null")), lit(" "),
        when(col("service").isNotNull, col("service_type")).otherwise(lit("null"))))
      .withColumn("splitt", split($"value", "\t")
      .select($"splitt".getItem(1).alias("datetime"))

Мне нужно извлечь метку времени с новым столбцом «datetime» 2019-05-14 04:02:03 снизу строка;

{"value":"2019-05-14T09:02:06.486Z index:: host:: 2019-05-14 04:02:03,307 INFO  - \tTue May 14 04:02:03 CDT 2019\tID:<490744.1557824523305.0>\tsv\tAFTER_LOOKUP_QUERY_PARTNER_CHANNEL\t[messageData(DispatchID: 06708235871 Region: EMEA SubRegion: EU OperationType: <OperationType>STATUSUPDATE</OperationType> Operation: StatusUpdate)]\tms \t"}

1 Ответ

1 голос
/ 15 мая 2019

Вы можете использовать функцию regex_extract для извлечения только метки времени из строки, как показано ниже

df.withColumn("dateTime", 
      regexp_extract($"value", """\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d""", 0)
).show(false)

Выход:

+-------------------+
|dateTime           |
+-------------------+
|2019-05-14 04:02:03|
+-------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...