我有这 2 个 Spark 表:
simx
x0: num 1.00 2.00 3.00 ...
x1: num 2.00 3.00 4.00 ...
...
x788: num 2.00 3.00 4.00 ...
和
simy
y0: num 1.00 2.00 3.00 ...
在这两个表中,每列具有相同数量的值。表x
和y
都分别保存到句柄simX_tbl
和simY_tbl
中。实际数据量很大,可能达到40GB。
我想计算其中每一列的相关系数simx
(simy
比如说像cor(x0, y0, 'pearson')
)。
我到处搜索,我认为没有任何现成的cor
功能,所以我正在考虑使用相关公式本身(就像这里提到的那样)。
基于我上一个问题中的一个很好的解释,我认为使用mutate_all
ormutate_each
不是很有效,并且给出了C stack error
更大的数据大小,所以我考虑改用直接invoke
调用函数Spark
。
到目前为止,我设法到达这里:
exprs <- as.list(paste0("sum(", colnames(simX_tbl),")"))
corr_result <- simX_tbl%>%
spark_dataframe() %>%
invoke("selectExpr", exprs) %>%
invoke("toDF", as.list(colnames(simX_tbl))) %>%
sdf_register("corr_result")
计算. sum
_ simx
但是后来,我意识到我还需要计算simy
表格,而且我不知道如何将两个表格交互在一起(例如,simy
在操作时访问simx
)。
有什么方法可以更好地计算相关性?或者也许只是如何与其他 Spark 表交互。
我的 Spark 版本是 1.6.0
编辑:我尝试使用以下combine
功能dplyr
:
xy_df <- simX_tbl %>%
as.data.frame %>%
combine(as.data.frame(simY_tbl)) %>%
# convert both table to dataframe, then combine.
# It will become list, so need to convert to dataframe again
as.data.frame
xydata <- copy_to(sc, xy_df, "xydata") #copy the dataframe into Spark table
但我不确定这是否是一个好的解决方案,因为:
- 需要加载到 R 内部的数据框中,我认为这对于大数据不实用
尝试
head
处理xydata
时,列名变为所有值的连接xydata %>% head Source: query [6 x 790] Database: spark connection master=yarn-client app=sparklyr local=FALSE
c_1_67027262134984_2_44919662134984_1_85728542134984_1_49317262134984_
1 1.670273
2 2.449197
3 1.857285
4 1.493173
5
-5671.5768557.6