Как разбить столбец со скалой на основе одного символа и пробела - PullRequest
0 голосов
/ 17 февраля 2019

Я хочу разделить столбец "_time", который содержит дату и время (как fieldtype = string)

даты внутри столбца "_time" выглядят так: 27-11-2017 08:20:33 Итак, я подумал, что это может сработать:

    df.withColumn("col1", split(col("_time"), "\\-").getItem(0))
  .withColumn("col2", split(col("_time"), "\\-").getItem(1))
  .withColumn("col3", split(col("_time"), "\\-").getItem(2))
  .withColumn("col4", split(col("_time"), "\\' '").getItem(3))
  .show()

, но это приводит к:

-------------------+----+----+-------------+----+
              _time|col1|col2|         col3|col4|
-------------------+----+----+-------------+----+
27-11-2017 08:20:33|  27|  11|2017 08:20:33|null|
27-11-2017 08:20:35|  27|  11|2017 08:20:35|null|
27-11-2017 08:20:35|  27|  11|2017 08:20:35|null|

, так что, похоже, он ничего не делает с пробелом.Я пытался использовать это:

.withColumn("col4", split(col("_time"), "\\' '")

, но это также не работает.(дает тот же результат)

есть предложения?

С уважением

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

В качестве альтернативы вы можете использовать date_format, например,

val newDf = df
  .withColumn("_time", unix_timestamp($"_time", "dd-MM-yyyy HH:mm:ss").cast("timestamp") )
  .select($"_time", date_format($"_time", "dd"), date_format($"_time", "MM")
    , date_format($"_time", "yyyy"), date_format($"_time", "HH")
    , date_format($"_time", "mm"), date_format($"_time", "ss")
         )

newDf.show

Подробнее о date_format здесь и здесь .

0 голосов
/ 17 февраля 2019

Используйте | (что означает "или" в Regex) в методе split, чтобы указать, что либо -, либо whitespace может быть разделителем, как показано ниже:

val df = Seq(
  "27-11-2017 08:20:33", "28-12-2017 09:30:44"
).toDF("_time")

df.
  withColumn("tsArr", split($"_time", "\\-|\\s")).
  select($"tsArr"(0), $"tsArr"(1), $"tsArr"(2), $"tsArr"(3)).
  show
// +--------+--------+--------+--------+
// |tsArr[0]|tsArr[1]|tsArr[2]|tsArr[3]|
// +--------+--------+--------+--------+
// |      27|      11|    2017|08:20:33|
// |      28|      12|    2017|09:30:44|
// +--------+--------+--------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...