[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 来做到这一点。
谢谢
我找到了一种解决方案。步骤如下:
- 使用以下代码创建可变数据框df_all。
df.groupby("groupid").agg(functions.corr("datacol1","corr_col")
- 迭代所有剩余的 data_col 列,为这次迭代创建一个临时数据框。在此迭代中,使用 df_all 在 groupid 列上加入临时数据框,然后删除重复的 groupid 列。
- 迭代后,我将得到包含所有相关数据的数据框。我需要验证数据。
更新:
找到了有效的方法。生成一个计算相关性的函数列表,如 List(corr(),corr(),...,corr())。然后将这个列表传入agg函数,生成相关数据框。
我有如下数据框:
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 来做到这一点。
谢谢
我找到了一种解决方案。步骤如下:
- 使用以下代码创建可变数据框df_all。 df.groupby("groupid").agg(functions.corr("datacol1","corr_col")
- 迭代所有剩余的 data_col 列,为这次迭代创建一个临时数据框。在此迭代中,使用 df_all 在 groupid 列上加入临时数据框,然后删除重复的 groupid 列。
- 迭代后,我将得到包含所有相关数据的数据框。我需要验证数据。
更新: 找到了有效的方法。生成一个计算相关性的函数列表,如 List(corr(),corr(),...,corr())。然后将这个列表传入agg函数,生成相关数据框。