Паркетный файл - Временные ряды с переменной частотой

Моя ситуация такова:

  • У меня есть список из сотен параметров временных рядов
  • Каждый параметр не зависит друг от друга
  • Каждый параметр имеет базовую частоту (скажем, 10 Гц), но из-за аппаратных ограничений может быть сохранено от 9 до 11 Гц (переменная частота).
  • Каждый параметр имеет различную базовую частоту
  • Обычно мне нужно читать только несколько параметров (столбцов) за раз и "соединять их" по метке времени.

Мои вопросы:

  • Как вы думаете, паркет будет подходящим форматом файла, учитывая это краткое описание?
  • Может ли паркет иметь дело с переменной частотой? Другими словами, сохраняет ли это временную метку, связанную с каждым значением?

2 ответа

Решение

Сам Паркет не ставит метки времени на данные, вам нужно сделать это самостоятельно, добавив дополнительное поле, в котором вы будете хранить метки времени каждого отдельного чтения. Если вы знаете частоту, с которой каждый параметр был прочитан, его легко преобразовать в метку времени перед вставкой данных в файл.

Следующая проблема, с которой вы столкнетесь, состоит в том, что параметры не будут считываться точно в одно и то же время, поэтому вы должны учитывать это в любых вычислениях, которые вам нужно делать с вашими данными. На данный момент у вас есть много разных вариантов в зависимости от ваших потребностей и характера ваших данных, я просто упомяну один. Для непрерывных переменных вы можете пересчитать свои данные так, чтобы временные метки были одинаковыми для каждого параметра. Вы можете сделать это, интерполируя свои показания в реальном времени, чтобы вычислить показания в целевом времени. Есть много математических соображений на данный момент, но они выходят за рамки вашего вопроса и актуальности формата хранения.

Короче 1. да 2. нет

Я бы посоветовал сохранять данные в разных файлах на частоту, если разница больше 5, то есть один - 5 Гц, а другой - 10 Гц. Другой подход состоит в том, чтобы заполнить пробелы нулем, чтобы данные хотели что-то вроде этого

schema = types.StructType([
  types.StructField("timespeed", types.LongType(), False),
  types.StructField("speed", types.LongType(), True),
  types.StructField("tempature", types.LongType(), True)
])

data = [
  (1, 6, 10),
  (2, 7, None),
  (3, None, None),
  (4, 8, 11),
  (5, 9, None)
]

df_w_schema = sqlContext.createDataFrame(data, schema)
df_w_schema.collect()
df_w_schema.write.parquet('nullable_check_w_schema')

df_parquet_w_schema =  sqlContext.read.schema(schema).parquet('nullable_check_w_schema')
df_parquet_w_schema.printSchema()
Другие вопросы по тегам