代码之家  ›  专栏  ›  技术社区  ›  Ophir Yoktan

在spark中可以并行读取大的s3csv文件吗?

  •  1
  • Ophir Yoktan  · 技术社区  · 6 年前

    通常spark文件保存在多个部分中,允许每个工人读取不同的文件。 在处理单个文件时是否有类似的解决方案? s3提供了允许这种行为的selectapi。

    https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-s3select.html ),但这似乎只与优化查询有关,与并行读取无关

    0 回复  |  直到 6 年前
        1
  •  2
  •   stevel    6 年前

    s3select与您的用例无关。

    1. s3select:在S3存储中完成sqlselect和project,这样客户机就可以获得预过滤的数据。结果以CSV形式返回,头被剥离,或者JSON。然后,您就不能让一个以上的工人将此作为目标。(您可以尝试,但是每个worker都必须读入并丢弃runup中的所有数据,直到偏移量为止,预测每个worker可以处理的范围基本上是不可能的)

    2. 您:让>1个worker处理文件的不同部分

    将大文件分成小部分进行并行处理正是Spark(以及mapreduce、hive等)对任何有意义的格式所做的事情。

    CSV文件很容易分区,只要它们是用 压缩格式(none,snappy-但不是gzip)

    除非您的工作人员每行都要进行大量的计算,否则在值得这样做之前有一个最小的块大小。实验。

        2
  •  1
  •   Andrew Long    6 年前

    如果希望同一个文件上有多个读卡器,请使用类似Parquet的格式,其中的行组具有在页脚中定义的显式定义的起始位置,这些行组可以由独立的读取器读取。当spark读取parquet文件时,它将把行组分成单独的任务。最终拥有适当大小的文件对于spark性能非常重要。

    推荐文章