我正在处理一个 2.5 GB 的 csv 文件,其中包含 110 万行和 1000 个似乎稀疏的数字列。我目前在具有 8 GB RAM 的 1 核 VM 上执行 Spark,数据已分为 16 个分区。
我尝试了类似以下的方法,但需要很长时间:
ldf <- dapplyCollect(
df,
function(df.partition) {
apply(df.partition, 2, function(col) {sum(is.na(col))})
})
这是一种方法,使用sparklyr
and dplyr
。为了提供可重现的示例,我使用的航班数据来自nycflights13
包(19 个变量的 336776 个观测值)
library(nycflights13)
library(sparklyr)
library(dplyr)
sc <- sparklyr::spark_connect(master = "local", version = "2.1.0", hadoop_version = "2.7")
flights_spark <- sparklyr::copy_to(sc, flights)
src_tbls(sc)
flights_spark %>%
dplyr::mutate_all(is.na) %>%
dplyr::mutate_all(as.numeric) %>%
dplyr::summarise_all(sum) %>%
dplyr::collect()
你得到结果
> collect(flights_spark_isna_count)
# A tibble: 1 × 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest air_time
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 0 0 8255 0 8255 8713 0 9430 0 0 2512 0 0 9430
# ... with 4 more variables: distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dbl>
在我的旧笔记本电脑中,所有这些代码大约花费了 30 秒(即包括启动 Spark 会话、将数据读入 Spark,然后计算 NA;我认为最后一步花费了不到 10 秒)。
当然,您的数据集更大,但也许它可以工作。 (我也在我正在处理的更大的数据集中尝试过,大约有 200 万个观测值和 146 个变量,而且只需要几分钟)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)