Apache spark 如何在spark scala中更快地处理.gz文件?

Apache spark 如何在spark scala中更快地处理.gz文件?,apache-spark,apache-spark-sql,spark-streaming,databricks,azure-databricks,Apache Spark,Apache Spark Sql,Spark Streaming,Databricks,Azure Databricks,我正在读.gz文件 val df = spark.read..format("csv") .option("header", "true") .option("delimiter", "|") .load("filepath.gz") df.createOrReplaceTempView("df") 当我进行处理时,需要花费大量的时间。 如何将其最小化 如果您的数据存储在单个csv文件中,则由单个工作人员处理。为了从大规模并行处理中获益,您应该将数据拆分为多个文件或使

我正在读.gz文件

val df = spark.read..format("csv")
    .option("header", "true")
    .option("delimiter", "|")
    .load("filepath.gz")

df.createOrReplaceTempView("df")
当我进行处理时,需要花费大量的时间。
如何将其最小化

如果您的数据存储在单个csv文件中,则由单个工作人员处理。为了从大规模并行处理中获益,您应该将数据拆分为多个文件或使用可拆分文件格式(如ORC或拼花)

要将单个文件拆分为多个文件,您可以像这样使用
repartition

df.repartition(100).write.orc(location)

所以。通常在谈到性能时,有几种改进方法:

  • 获得更多或更强大的硬件
  • 使用云来获得更强大的功能 硬件
  • 给你的工作分配更多的资源
  • 优化你的代码
  • 在您的情况下,您几乎无法在代码中优化任何内容—只有一个文件,只有一个操作。所以4是不行的

    由于同样的原因,越来越多的内核很难做得更好。尽管你可以试试。(3) 记忆也是如此


    因此,基本上只剩下前两个选项。

    如澄清意见中所述。。。您应该寻求更快的存储(HDSF、S3、Alluxio…)以获得更好的性能


    大部分时间都花在访问云存储中的数据文件上。

    .gzip不是Spark使用的好格式,因为压缩编解码器是不可拆分的。因此,Spark必须在单个节点上处理它,而且速度总是很慢

    如果可能,我建议您将压缩编解码器更改为其他可拆分的格式,或者在使用Spark处理文件之前,先在Spark之外预处理文件,以转换为其他格式。例如,您可以编写一个小的shell脚本,在尝试使用Spark读取文件之前解压缩并转换文件

    有关压缩格式的更多信息,请参见此:

    顺便说一下,CSV在Spark上也不是很好的格式。如果记录中嵌入了换行符,CSV也不一定是可拆分的。在这种情况下,您仍然在单个节点上进行处理


    我建议使用具有快速压缩的拼花地板,以获得最佳的综合性能。

    使用可拆分的gzip编解码器。请参见

    我需要读取和处理,而不是写入。你能在读取和处理方面提出一些建议吗?@RaviAnandVicky我自己没有尝试过,但你可以尝试使用支持并行读取gzip的替代gzip编解码器,比如@shuvaloc,这仍然不能解决处理时间问题。你从哪种类型的存储读取这些数据?是否有存储在HDFS中?@airliquide,不,不是HDFS。这是一个存储在云上的单一文件。可能是你的减速点!尝试获得更快的存储(离处理点更近)。大部分时间的减速都与您的云数据访问有关。