[spark-scalapi]通过spark数据框分组后计算多列与某一特定列的相关性

[spark-scalapi]calculate correlation between multiple columns and one specific column after groupby the spark data frame

我有如下数据框:

groupid datacol1 datacol2 datacol3 datacol* corr_co
00001 1 2 3 4 5
00001 2 3 4 6 5
00002 4 2 1 7 5
00002 8 9 3 2 5
00003 7 1 2 3 5
00003 3 5 3 1 5

我想通过每个groupid计算datacol*列和corr_col列之间的相关性。

所以我使用了以下 spark scala 代码如下: df.groupby("groupid").agg(functions.corr("datacol1","corr_col"),functions.corr("datacol2","corr_col"),functions.corr("datacol3","corr_col"),.....)

这是非常低效的,有没有有效的方法来做到这一点?

[编辑] 我的意思是如果我有 30 data_cols 列,我需要输入 30 次 functions.corr 来计算相关性。

我搜索了一下,好像functions.corr不接受List/Array参数,df.agg不接受函数作为参数。

有什么方法可以有效地做到这一点?我更喜欢使用 spark scala API 来做到这一点。

谢谢

我找到了一种解决方案。步骤如下:

  1. 使用以下代码创建可变数据框df_all。 df.groupby("groupid").agg(functions.corr("datacol1","corr_col")
  2. 迭代所有剩余的 data_col 列,为这次迭代创建一个临时数据框。在此迭代中,使用 df_all 在 groupid 列上加入临时数据框,然后删除重复的 groupid 列。
  3. 迭代后,我将得到包含所有相关数据的数据框。我需要验证数据。

更新: 找到了有效的方法。生成一个计算相关性的函数列表,如 List(corr(),corr(),...,corr())。然后将这个列表传入agg函数,生成相关数据框。