Как преобразовать столбец Spark Dataframe для целочисленного значения в ЧЧ: ММ: СС? - PullRequest
0 голосов
/ 29 мая 2018

Я использую искры со scala

val text = file.map(line=>line.split(" "))
.map(userRecord => (userRecord(0).trim.toInt,
      userRecord(1).trim.toInt, userRecord(2).trim.toDouble,userRecord(3).trim.toDouble,userRecord(4).trim.toDouble))
.toDF("time","nodeID","posX", "posY","speed")

я бы преобразовал время столбца тип строки в значение в ЧЧ: ММ: СС

время секунда

+-----+------+--------+-----+-----+--------+------+
| time|nodeID|    posX| posY|speed|    date|period|
+-----+------+--------+-----+-----+--------+------+
|29220|   148|  5316.2|500.0|59.04|7/5/2010|   556|

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете определить функцию udf для форматирования секунд в ЧЧ: ММ: сс как

import org.apache.spark.sql.functions._
def timeOfDay = udf((seconds: Long) => {
  val df = new java.text.SimpleDateFormat("HH:mm:ss")
  df.setTimeZone(java.util.TimeZone.getTimeZone("GMT"))
  df.format(seconds*1000)
})

, а затем вызвать функцию udf как

df.withColumn("time", timeOfDay(col("time")))
  .show(false)

, который должен дать вам

+--------+------+------+-----+-----+--------+------+
|time    |nodeID|posX  |posY |speed|date    |period|
+--------+------+------+-----+-----+--------+------+
|08:07:00|148   |5316.2|500.0|59.04|7/5/2010|556   |
+--------+------+------+-----+-----+--------+------+

Вы можете сделать то же самое с Java8 LocalTime , как

import java.time.LocalTime
import org.apache.spark.sql.functions._
def timeOfDay = udf((seconds: Long) => LocalTime.ofSecondOfDay(seconds).toString)

, однако, не будет включать0 раз .

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