【发布时间】:2017-11-21 06:54:42
【问题描述】:
您好,我是集群计算的新手,目前我只在独立集群 (sc <- spark_connect(master = "local", version = '2.0.2')) 上玩。我有一个巨大的 csv 文件(15GB),我想将其转换为 parquet 文件(第三块代码解释了原因)。这个 15GB 文件已经是 60GB 文件的样本,当我停止播放 arround 时,我需要使用/查询完整的 60GB 文件。目前我所做的是:
> system.time({FILE<-spark_read_csv(sc,"FILE",file.path("DATA/FILE.csv"),memory = FALSE)})
user system elapsed
0.16 0.04 1017.11
> system.time({spark_write_parquet(FILE, file.path("DATA/FILE.parquet"),mode='overwrite')})
user system elapsed
0.92 1.48 1267.72
> system.time({FILE<-spark_read_parquet(sc,"FILE", file.path("DATA/FILE.parquet"),memory = FALSE)})
user system elapsed
0.00 0.00 0.26
如您所见,这需要相当长的时间。我想知道在第一行代码 (spark_read_csv) 和 memory = FALSE 中会发生什么?它在哪里读取/保存到?当我断开并重新连接会话时,我可以访问该位置吗?
另外,有没有办法以更有效的方式结合第 1 步和第 2 步?
我并不羞于尝试使用 API 中不可用的低级函数,因为它很简单并且可以在很大程度上实现自动化。
【问题讨论】:
-
@Noobie 不幸的是没有。我认为通过设置 Hive 数据库而不使用
master = "local"可以解决问题,但还没有尝试过。如果您发现任何问题,请发布到此提要,以供大家受益。 -
你的数据有多宽,即你有很多变量,你需要处理所有的变量吗?
memory=FALSE标志告诉 Spark not 将完整的 DataFrame 加载到内存中...如果您只对一堆列感兴趣,这尤其有用。例如,如果你运行FILE %>% select(var1, var2) %>% filter(var2 > 1) %>% compute()之类的东西,Spark 只会将选定和过滤的列加载到内存中,而不是整个数据帧。这大大加快了处理速度。 -
@ℕʘʘḆḽḘ 延迟与模式推断有关,没有保存数据。如果你想避免它,你应该明确地提供模式。
标签: r apache-spark sparklyr