【问题标题】:How can I increase parallelism with loading large XML file with spark-xml?如何通过 spark-xml 加载大型 XML 文件来增加并行度?
【发布时间】:2018-02-15 22:14:27
【问题描述】:

我有一个中等大小的 xml 文件(200MB,bz2),我正在使用 spark-xml 在具有 1 个主节点和两个核心节点的 AWS emr 集群上加载该文件,每个节点具有 8cpus 和 32GB RAM。

import org.apache.spark.sql.SQLContext
import com.databricks.spark.xml._

val sqlContext = new SQLContext(sc)
val experiment = sqlContext.read
  .format("com.databricks.spark.xml")
  .option("rowTag", "EXPERIMENT")
  .load("s3n://bucket/path/meta_experiment_set.xml.bz2")

这个加载需要相当长的时间,据我所知,只用一个分区就可以完成。是否可以告诉 spark 在加载时对文件进行分区以更好地使用计算资源?我知道我可以在加载后进行分区。

【问题讨论】:

    标签: scala performance apache-spark bz2


    【解决方案1】:

    您可以重新分区以增加并行度:

    experiment.repartition(200)
    

    其中 200 是您要使用的任何 nbr 执行器。

    repartition

    【讨论】:

    • 有没有办法并行读取文件?我正在使用 bz2 压缩,希望可以并行读取数据。如果可以并行化,等待一个小时来读取和计算模式似乎很愚蠢。
    • 与 .gz 压缩文件相反,.bz2 文件可以并行解压缩。见this answer
    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多