Подтвердить что ты не робот

Как использовать постоянное значение в UDF Spark SQL (DataFrame)

У меня есть dataframe, который включает timestamp. Чтобы заполнить по времени (минуту, час или день), я пробовал как:

val toSegment = udf((timestamp: String) => {
  val asLong = timestamp.toLong
  asLong - asLong % 3600000 // period = 1 hour
})

val df: DataFrame // the dataframe
df.groupBy(toSegment($"timestamp")).count()

Это прекрасно работает.

Мой вопрос заключается в том, как обобщать UDF toSegment как

val toSegmentGeneralized = udf((timestamp: String, period: Int) => {
  val asLong = timestamp.toLong
  asLong - asLong % period
})

Я пробовал следующим образом, но он не работает

df.groupBy(toSegment($"timestamp", $"3600000")).count()

Кажется, что найден столбец с именем 3600000.

Возможное решение использовать постоянный столбец, но я не смог его найти.

4b9b3361

Ответ 1

Вы можете использовать org.apache.spark.sql.functions.lit() для создания столбца констант:

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

df.groupBy(toSegment($"timestamp", lit(3600000))).count()