编写 UDAF 以在 spark 数据帧上执行滚动回归是否有意义?
Does it make sense to write a UDAF to perform a rolling regression on a spark dataframe?
我会尽力描述我的情况,然后我希望这个网站上的另一个用户能告诉我我正在上的课程是否有意义,或者我是否需要重新评估我的 approach/options .
背景:
我使用 pyspark,因为我最熟悉 python vs scala,java 或 R。我有一个 spark 数据框,它是使用 [=27] 从配置单元 table 构建的=] 来查询 table。在这个数据框中,我有很多不同的 'files'。每个文件都由时间序列数据组成。我需要对数据的子集执行滚动回归,跨越每个 'file' 的整个时间值。在做了很多研究之后,我计划创建一个 window 对象,制作一个 UDF 来指定我希望我的线性回归如何发生(在函数内部使用 spark ml 线性回归),然后将数据返回到数据框。这将发生在 .withColumn() 操作的上下文中。这是有道理的,我觉得这种方法是正确的。我发现目前 pyspark 不支持创建 UDAF 的能力 (see the linked jira)。所以这就是我目前正在考虑做的事情。
显示 here and here that it is possible to create a UDAF in scala and then reference said function within the context of pyspark. Furthermore it is shown here UDAF(用 scala 编写)能够接受多个输入列(这是一个必要的功能,因为我将进行多元线性回归 - 接受 3 个参数)。我不确定的是我的 UDAF 使用 org.apache.spark.ml.regression 的能力,我计划将其用于我的回归。如果无法做到这一点,我可以使用矩阵手动执行操作(我相信,如果 scala 允许的话)。我几乎没有使用 scala 的经验,但肯定有动力学习足够的知识来编写这个函数。
我想知道是否有人对未来的这项任务有任何见解或建议。我觉得在我完成研究之后,这既是可能的,也是适当的行动方案。但是,我害怕在根本不可能或比我想象的要困难得多的情况下花费大量时间来尝试完成这项工作。
感谢您的见解。
After doing a good bit of research I was planning on creating a window object, making a UDF that specified how I wanted my linear regression to occur (using the spark ml linear regression inside the function
不管 PySpark 是否支持 UDAF,这都行不通。您不能使用来自 UDF / UDAF 的分布式算法。
问题有点含糊,不清楚你有多少数据,但我会考虑将普通 RDD 与 scikit-learn
(或类似工具)一起使用,或者尝试从头开始实现整个过程。
我会尽力描述我的情况,然后我希望这个网站上的另一个用户能告诉我我正在上的课程是否有意义,或者我是否需要重新评估我的 approach/options .
背景:
我使用 pyspark,因为我最熟悉 python vs scala,java 或 R。我有一个 spark 数据框,它是使用 [=27] 从配置单元 table 构建的=] 来查询 table。在这个数据框中,我有很多不同的 'files'。每个文件都由时间序列数据组成。我需要对数据的子集执行滚动回归,跨越每个 'file' 的整个时间值。在做了很多研究之后,我计划创建一个 window 对象,制作一个 UDF 来指定我希望我的线性回归如何发生(在函数内部使用 spark ml 线性回归),然后将数据返回到数据框。这将发生在 .withColumn() 操作的上下文中。这是有道理的,我觉得这种方法是正确的。我发现目前 pyspark 不支持创建 UDAF 的能力 (see the linked jira)。所以这就是我目前正在考虑做的事情。
显示 here and here that it is possible to create a UDAF in scala and then reference said function within the context of pyspark. Furthermore it is shown here UDAF(用 scala 编写)能够接受多个输入列(这是一个必要的功能,因为我将进行多元线性回归 - 接受 3 个参数)。我不确定的是我的 UDAF 使用 org.apache.spark.ml.regression 的能力,我计划将其用于我的回归。如果无法做到这一点,我可以使用矩阵手动执行操作(我相信,如果 scala 允许的话)。我几乎没有使用 scala 的经验,但肯定有动力学习足够的知识来编写这个函数。
我想知道是否有人对未来的这项任务有任何见解或建议。我觉得在我完成研究之后,这既是可能的,也是适当的行动方案。但是,我害怕在根本不可能或比我想象的要困难得多的情况下花费大量时间来尝试完成这项工作。
感谢您的见解。
After doing a good bit of research I was planning on creating a window object, making a UDF that specified how I wanted my linear regression to occur (using the spark ml linear regression inside the function
不管 PySpark 是否支持 UDAF,这都行不通。您不能使用来自 UDF / UDAF 的分布式算法。
问题有点含糊,不清楚你有多少数据,但我会考虑将普通 RDD 与 scikit-learn
(或类似工具)一起使用,或者尝试从头开始实现整个过程。