Pyspark 使用线性回归计算数据帧中许多不同实体的增长率

Pyspark 使用线性回归计算数据帧中许多不同实体的增长率,pyspark,regression,linear-regression,apache-spark-mllib,apache-spark-ml,Pyspark,Regression,Linear Regression,Apache Spark Mllib,Apache Spark Ml,我有一个包含数千个实体的数据框架,这些实体是随时间测量的,我需要计算每个实体随时间的增长,最后一步我遇到了麻烦 我的数据框如下所示: +------------+---------+-----------+ |每月|实体|计数| +------------+---------+-----------+ |2018|u 01|Foo|100| |2018|U 02|Foo|200| |2018|u 03|Foo|470| |2018|u 04|Foo|500| |2018|u 05|Foo|550

我有一个包含数千个实体的数据框架,这些实体是随时间测量的,我需要计算每个实体随时间的增长,最后一步我遇到了麻烦

我的数据框如下所示:

+------------+---------+-----------+
|每月|实体|计数|
+------------+---------+-----------+
|2018|u 01|Foo|100|
|2018|U 02|Foo|200|
|2018|u 03|Foo|470|
|2018|u 04|Foo|500|
|2018|u 05|Foo|550|
|2018|u 06|Foo|600|
|2018年|酒吧| 180|
|2018|02 |巴| 150|
|2018年04巴300巴|
+------------+---------+-----------+
然后,我的下一步是执行一个pivot并用零填充所有
null
元素,以便为每个实体创建完整的6个月时间序列向量

df=df.groupBy('entity')。pivot('yearMonth')。sum('count')。na.fill(0)
这创造了

+---------+-------+-------+-------+-------+-------+-------+
|实体| 2018 | 01 | 2018 | 02 | 2018 | 03 | 2018 | 04 | 2018 | 05 | 2018 | 06|
+---------+-------+-------+-------+-------+-------+-------+
|富| 100 | 200 | 470 | 500 | 550 | 600|
|巴| 180 | 150 | 0 | 300 | 0 | 0|
+---------+-------+-------+-------+-------+-------+-------+
在这之后,我取消数据透视,应用
vectorsassembler
,并将标签转换为
DoubleType

df=df.selectExpr(“实体”,
“堆栈(6,'1',2018_01,'2',2018_02,'3',2018_03,'4',2018_04,'5',2018_05,'6',
2018_06)as(标签_字符串,计数)“)
assembler=VectorAssembler(inputCols=['count'],outputCol='features')
df=汇编程序.转换(df)
df=df.withColumn('label',df['label_string'].cast(DoubleType())。选择('entity','label','features'))
我的最后一个数据帧是这样的

+---------+---------+-----------+
|实体|标签|特征|
+---------+---------+-----------+
|Foo | 1.0 |[100]|
|Foo | 2.0 |[200]|
|Foo | 3.0 |[470]|
|Foo | 4.0 |[500]|
|Foo | 5.0 |[550]|
|Foo | 6.0 |[600]|
|巴| 1.0 |[180]|
|巴| 2.0 |[150]|
|巴| 3.0 |[0]|
|巴| 4.0 |[300]|
|巴| 5.0 |[0]|
|巴| 6.0 |[0]|
+---------+---------+-----------+
现在我想对每个实体的时间序列应用Spark ML的
线性回归
,并保存结果线的梯度。有效执行此操作的最佳方法是什么

此外,这是我第一次尝试使用PySpark执行(简单的)机器学习任务,因此请告诉我是否有更好的方法来执行上述步骤

其他想法: 我一直在四处寻找,似乎没有什么好方法可以做到这一点,所以我是否应该重新格式化feature列,使每一行包含整个时间序列的数组,然后应用sklearn中的内容? e、 g

+---------+----------------------------+
|实体|特征|
+---------+----------------------------+
|Foo |[100200470500550600]|
|巴|[180150,0300,0,0]|
+---------+----------------------------+
锁定为24(对应24个月)锁定为24(对应24个月)