Parquet 文件 - 具有可变频率的时间序列

Parquet file - Timeseries with variable frequency

我的情况是:

我的问题是:

Parquet 本身不会为数据添加时间戳,您需要自己执行此操作,添加一个额外的字段,您将在其中存储每个单独读数的时间戳。如果您知道每个参数被读取的频率,那么在将数据插入文件之前转换为时间戳是微不足道的。

您将 运行 遇到的下一个问题是参数不会完全同时读取,因此您必须在需要对数据进行的任何计算中考虑到这一点。在这一点上,根据您的需要和数据的性质,您有许多不同的选择,我只提一个。对于连续变量,您可以对数据重新采样,以便每个参数的时间戳都相同。您可以通过在实际时间戳处插入读数来计算目标时间戳处的读数来做到这一点。在这一点上有很多数学上的考虑,但它们超出了你的问题的范围和存储格式的相关性。

简而言之 1. 是的 2. 没有

如果差异大于 5,即一个是 5Hz,另一个是 10Hz,我建议将数据保存在每个频率的不同文件中。 另一种方法是用 null 填充空白,这样数据就会像这样

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()