我很兴奋,并希望就如何处理以下问题提出一些建议。
我有一年中交易日的一分钟蜡烛数据(高,低,开,收)。这代表了大约360,000个数据点。
我想要做的是在数据(可能是每个数据点)上运行一些模拟,我想要的是给定数据点,获取前一个(或下一个)x数据点,然后运行一些代码那就是结果。
理想情况下,这将在地图样式函数中,但您无法在Spark中执行嵌套操作。我可以考虑这样做的唯一方法是创建一个Candle的DataSet作为键,并使相关数据不规范化或在每个键上对其进行分区 - 无论哪种方式都效率低下。
理想情况下,我正在寻找能做的事情(蜡烛,列表) - >双倍或类似的东西。
我确信有更好的方法。
我正在使用Spark 2.1.0并使用Yarn作为调度引擎。
答案 0 :(得分:1)
我在Spark中做了很多时间序列处理,并花了一些时间考虑完全相同的问题。
不幸的是,在我看来,没有很好的方法可以按照你想要的方式处理所有数据,而不按你的建议构建它。我想我们必须接受这种事情是一种昂贵的操作,无论我们是使用Spark,pandas还是Postgres。
您可以使用Spark SQL window functions隐藏代码复杂性(请查看rangeBetween
/ RANGE BETWEEN
),但无法转义您正在执行的操作的本质。
Protip:将数据映射到features->标签一次并将其写入磁盘以使开发/测试更快!