【发布时间】:2017-09-23 18:14:14
【问题描述】:
我有这 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 函数,所以我正在考虑使用相关公式本身(就像mentioned in here)。
基于my previous question 中的一个很好的解释,我认为使用mutate_all 或mutate_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")
计算simx 中每一列的sum。但后来,我意识到我还需要计算simy 表,我不知道如何将这两个表交互在一起(例如,在操作simx 时访问simy)。
有没有什么方法可以更好地计算相关性?或者只是如何与其他 Spark 表交互。
我的 Spark 版本是 1.6.0
编辑:
我尝试使用来自dplyr 的combine 函数:
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=FALSEc_1_67027262134984_2_44919662134984_1_85728542134984_1_49317262134984_
1 1.670273
2 2.449197
3 1.857285
4 1.493173
5 1.576857
6 -5.672155
【问题讨论】:
标签: r apache-spark dplyr sparkr sparklyr