重构pyspark数据框

Posted

技术标签:

【中文标题】重构pyspark数据框【英文标题】:Restructuring pyspark dataframe 【发布时间】:2019-03-31 13:09:29 【问题描述】:

我正在解决一个回归问题。为此,我首先对数据进行聚类,并对每个聚类应用回归模型。现在我想实现另一个回归模型,它将每个集群的预测输出作为一个特征,并输出聚合的预测值。

我已经在 pyspark 中实现了聚类和回归模型。 但我无法最终提取每个集群的输出作为输入到另一个回归模型的特征。

如何在 pyspark(最好)或 pandas 中有效地实现这种转换?

当前数据框:

date   cluster  predVal actual
31-03-2019 0     14      13
31-03-2019 1     24      15
31-03-2019 2     13      10
30-03-2019 0     14      13
30-03-2019 1     24      15
30-03-2019 2     13      10

所需的数据帧

date       predVal0    predVal1   predVal2    actual
31-03-2019 14          24         13          38  // 13+15+10
30-03-2019 14          24         13          38  // 13+15+10

【问题讨论】:

您正在寻找的功能是枢轴。像 df.groupBy('date').pivot('cluster').agg(first('predVal')).join(df.groupBy('date').sum('actual'),['date' ]) 应该这样做。 【参考方案1】:

您想在 pyspark 中进行数据透视,然后通过对 predVali 列求和来创建一个新列。您应该分三步进行。

第一步,您要应用数据透视。您的索引是日期,您要透视的列是集群和值的列(如果 predVal)。

df_pivot = df.groupBy('date').pivot('cluster').agg(first('predVal'))

那么,你应该申请一个总和

df_actual = df.groupBy('date').sum('actual')

最后,您可以将实际列与索引列数据上的枢轴数据连接起来:

df_final = df_pivot.join(df_actual ,['date']) 

此链接很好地回答了您的问题: - https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-apache-spark.html

【讨论】:

以上是关于重构pyspark数据框的主要内容,如果未能解决你的问题,请参考以下文章

python, pyspark : 获取 pyspark 数据框列值的总和

如何将 pyspark 数据框列中的值与 pyspark 中的另一个数据框进行比较

PySpark:无法创建火花数据框

使用圆形函数转换 pyspark 数据框列不起作用(pyspark)

PYSPARK:如何在 pyspark 数据框中找到两列的余弦相似度?

Pyspark:如何遍历数据框列?