Я хочу упорядочить по времени некоторые авро-файлы, полученные из HDFS.
Схема моих файлов avro:
Заголовки: Map [String, String], тело: String
Теперь сложная часть заключается в том, что отметка времени является одной из ключ / значение с карты. Итак, у меня есть временная метка на карте:
ключ_1 -> значение_1, ключ_2 -> значение_2, отметка времени -> 1234567, ключ_n ->
value_n
Обратите внимание, что тип значений - String.
Я создал класс case для создания набора данных с этой схемой:
case class Root(headers : Map[String,String], body: String)
Создание моего набора данных:
val ds = spark
.read
.format("com.databricks.spark.avro")
.load(pathToHDFS)
.as[Root]
Я действительно не знаю, как начать с этой проблемы, так как я могу получить только заголовки столбцов и тело. Как я могу получить вложенные значения для окончательной сортировки по отметке времени?
Я бы хотел сделать что-то вроде этого:
ds.select("headers").doSomethingToGetTheMapStructure.doSomeConversionStringToTimeStampForTheColumnTimeStamp("timestamp").orderBy("timestamp")
Небольшая точность: я не хочу терять какие-либо данные из моего начального набора данных, просто операция сортировки.
Я использую Spark 2.3.0.