您好我是新来的集群计算,目前我只玩了独立的集群(sc <- spark_connect(master = "local", version = '2.0.2')
)上。我有一个巨大的csv文件(15GB),我想转换为拼花文件(代码块三解释了为什么)。这15GB的文件已经是一个60GB文件的样本,我需要使用/查询完整的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中的较低级别的功能。
当spark_read_csv
与memory = FALSE
调用不保存任何数据。延迟你是不相关的数据加载本身,而是架构推理过程,这需要一个单独的数据扫描。
由于方便,因为它是使用架构推断,它是更好的性能,明智的做法是明确规定的模式,作为名为向量,映射的列名to type's simple string。例如,如果你在一个local
模式加载虹膜数据集:
path <- tempfile()
readr::write_csv(iris, path)
你会使用
spark_read_csv(
sc, "iris", path, infer_schema=FALSE, memory = FALSE,
columns = c(
Sepal_Length = "double", Sepal_Width = "double",
Petal_Length = "double", Petal_Width = "double",
Species = "string"))