代码之家  ›  专栏  ›  技术社区  ›  guilhermecgs

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

  •  1
  • guilhermecgs  · 技术社区  · 7 年前

    我的情况是:

    • 我有数百个timeseries参数的列表
    • 每个参数相互独立
    • 每个参数都有一个基本频率(比如10hz),但由于硬件限制,可以将其从9 hz保存到11 hz(可变频率)。
    • 每个参数都有不同的基频
    • 通常,我一次只需要读取其中的几个参数(列),并按时间戳“连接它们”。

    我的问题是:

    • 您认为parquet是一种合适的文件格式吗?
    • 镶木地板可以处理变频吗?换句话说,它是否保存了与每个值关联的时间戳?
    2 回复  |  直到 7 年前
        1
  •  1
  •   Manu Valdés    6 年前

    拼花地板本身不给数据加时间戳,您需要自己做这件事,添加一个额外的字段,您将在其中存储每个读数的时间戳。如果您知道读取每个参数的频率,那么在将数据插入文件之前将其转换为时间戳就很简单了。

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

        2
  •  1
  •   Doron Segal    6 年前

    简言之 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()