我正在用 Spark/Scala 编写一个应用程序,我需要在其中计算一列的指数移动平均值。
EMA_t = (price_t * 0.4) + (EMA_t-1 * 0.6)
我面临的问题是我需要同一列的先前计算的值(EMA_t-1)。通过 mySQL,这可以通过使用 MODEL 或通过创建一个 EMA 列来实现,然后您可以更新每行的行,但我已经尝试过了,并且既不能使用 Spark SQL 也不能使用 Hive 上下文......有什么办法我可以访问这个 EMA_t-1?
我的数据如下所示:
timestamp price
15:31 132.3
15:32 132.48
15:33 132.76
15:34 132.66
15:35 132.71
15:36 132.52
15:37 132.63
15:38 132.575
15:39 132.57
所以我需要添加一个新列,其中我的第一个值只是第一行的价格,然后我需要使用以前的值:EMA_t = (price_t * 0.4) + (EMA_t-1 * 0.6) 来计算该列中的以下行。我的 EMA 列必须是:
EMA
132.3
132.372
132.5272
132.58032
132.632192
132.5873152
132.6043891
132.5926335
132.5835801
我目前正在尝试使用 Spark SQL 和 Hive 来做到这一点,但如果可以用另一种方式来做到这一点,这将同样受欢迎!我还想知道如何使用 Spark Streaming 做到这一点。我的数据在数据框中,我使用的是 Spark 1.4.1。
非常感谢您提供的任何帮助!