我会尽我所能描述我的情况,然后我希望本网站上的其他用户可以告诉我我正在服用的课程是否合理,或者是否需要重新评估我的方法/选项。写一个UDAF来执行火花数据帧的滚动回归是否有意义?
背景:
我用pyspark,因为我最熟悉Python VS斯卡拉,java或R.我有一个从蜂巢表使用pyspark.sql查询表构成的火花数据帧。在这个数据框中,我有许多不同的'文件'。每个文件都由时间序列数据组成。我需要对每个“文件”的整个时间值对数据的子集执行滚动回归。在做了一些研究之后,我计划创建一个窗口对象,制作一个UDF,指定我希望如何发生线性回归(在函数内部使用spark ml线性回归),然后将数据返回给数据框。这将发生在.withColumn()操作的上下文中。这是有道理的,我觉得这种方法是正确的。我发现目前pyspark不支持创建UDAF的能力(see the linked jira)。所以这是我目前正在考虑的事情。
它被显示为here和here它可以在scala中创建UDAF,然后在pyspark的上下文中引用所述函数。此外,它显示了here UDAF(用scala编写)能够获取多个输入列(一个必要的功能,因为我将进行多重线性回归 - 接受3个参数)。我不确定的是我的UDAF使用org.apache.spark.ml.regression的能力,我计划使用它进行回归。如果这不能完成,我可以使用矩阵手动执行操作(我相信,如果scala允许的话)。我几乎没有使用Scala的经验,但我肯定有足够的动力去学习写这个函数。
我想知道是否有人对此任务有任何见解或建议。我觉得在完成研究之后,这是可能的,也是适当的行动方向。然而,当我尝试做这项工作的时候,我感到很害怕,因为这是根本不可能的,或者比我想象的更困难。
感谢您的洞察力。
很难说没有关于计算的更多细节,以及您打算如何使用org.apache.spark.ml.regression。你能否提供更多细节? –
当然,这里是我写的python代码,tbh我不知道它是否工作,因为我无法测试它: 'def lrreg_int(sin_time,cos_time,prediction): lr = ml.regression.LinearRegression (predictionCol = prediction) model = lr.fit(sin_time,cos_time) intercept = model.intercept return intercept' –
仍然不清楚你试图达到什么。你说,基于时间序列的滚动线性回归,这听起来像是一个面向流的回归方法,你有没有看看面向流的mllib?根据你所说的,这可能是你想要的http://spark.apache.org/docs/2.2.0/mllib-linear-methods.html#streaming-linear-regression –