Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何提高读取csv的性能?_R_Apache Spark_Sparklyr - Fatal编程技术网

R 如何提高读取csv的性能?

R 如何提高读取csv的性能?,r,apache-spark,sparklyr,R,Apache Spark,Sparklyr,我认为使用sparklyr读取CSV文件的速度非常慢。见MVE library(sparklyr) library(dplyr) conf <- spark_config() conf$spark.executor.memory <- "60GB" conf$spark.memory.fraction <- 0.9 conf$spark.executor.cores <- 6 conf$spark.dynamicAllocation.enabled <- "fal

我认为使用
sparklyr
读取CSV文件的速度非常慢。见MVE

library(sparklyr)
library(dplyr)

conf <- spark_config()
conf$spark.executor.memory <- "60GB"
conf$spark.memory.fraction <- 0.9
conf$spark.executor.cores <- 6
conf$spark.dynamicAllocation.enabled <- "false"
sc <- sparklyr::spark_connect(master = "local", config = conf)

library(data.table)

fwrite(data.table(
  id1 = sample(sprintf("id%03d",1:K), N, TRUE),      # large groups (char)
  id2 = sample(sprintf("id%03d",1:K), N, TRUE),      # large groups (char)
  id3 = sample(sprintf("id%010d",1:(N/K)), N, TRUE), # small groups (char)
  id4 = sample(K, N, TRUE),                          # large groups (int)
  id5 = sample(K, N, TRUE),                          # large groups (int)
  id6 = sample(N/K, N, TRUE),                        # small groups (int)
  v1 =  sample(5, N, TRUE),                          # int in range [1,5]
  v2 =  sample(5, N, TRUE),                          # int in range [1,5]
  v3 =  sample(round(runif(100,max=100),4), N, TRUE) # numeric e.g. 23.5749
), "a.csv")

system.time(sparklyr::spark_read_csv(sc, "a", "a.csv"))
库(年)
图书馆(dplyr)

conf这里至少有三个问题:

  • 本地
    模式不是分布式的,甚至不是并行的。它将只使用一个本地线程。如果只有一个节点可供使用,请至少尝试增加可用线程的数量(可能超过可用内核的数量)

    一般来说,单个JVM路径不是最好的方法,尤其是在内存较大的情况下。即使您没有多个节点可供使用,也可以使用pseudo distrubuted和独立集群以及并置的主节点和工作节点

  • 您不为读取器提供模式,并且需要模式推断(默认值为
    experre\u schema
    argument)。如果你想避免这种开销,你应该这样做

  • 您急切地缓存数据(默认值为
    memory
    argument),这既有用又很少有用
此外:

  • spark.memory.fraction
    的如此高的值很可能会让垃圾收集器疯狂地填充旧的gen。请确保检查GC时间,如果出现异常高的值,请将
    spark.memory.fraction
    降低到默认值(0.6)以下,而不是增加
最后:

  • 降低你的期望。火花

文件是否存储在本地?如果您
fread
CSV&然后将其并行化,会发生什么?你的星火背景是本地的吗?只是确认你真的有60Gb的本地内存…是的,我的电脑上的所有东西都是本地的。我正在努力提高本地模式性能的代码中使用的。。。您是否也使用了
spark.read.csv