Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark 在spark中是否可以并行读取大型S3CSV文件?_Apache Spark_Amazon S3_Amazon Emr - Fatal编程技术网

Apache spark 在spark中是否可以并行读取大型S3CSV文件?

Apache spark 在spark中是否可以并行读取大型S3CSV文件?,apache-spark,amazon-s3,amazon-emr,Apache Spark,Amazon S3,Amazon Emr,通常,spark文件保存在多个部分中,允许每个工作人员读取不同的文件。 处理单个文件时是否有类似的解决方案? s3提供了允许这种行为的select API spark似乎支持此API(),但这似乎只与优化查询相关,而不是用于并行阅读S3选择与您的用例无关 S3选择:让SQL选择和项目在S3存储中完成,以便客户端获得预过滤的数据。结果以CSV形式返回,并去掉标题,或JSON。这样,您就不能有超过1个工作目标。(您可以尝试,但每个工作进程都必须读入并丢弃运行到其偏移量的所有数据,并且预测每个工作进程

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


spark似乎支持此API(),但这似乎只与优化查询相关,而不是用于并行阅读

S3选择与您的用例无关

  • S3选择:让SQL选择和项目在S3存储中完成,以便客户端获得预过滤的数据。结果以CSV形式返回,并去掉标题,或JSON。这样,您就不能有超过1个工作目标。(您可以尝试,但每个工作进程都必须读入并丢弃运行到其偏移量的所有数据,并且预测每个工作进程可以处理的范围基本上是不可能的)

  • 您:让>1个工作进程处理已分区文件的不同部分

  • 对于任何有意义的格式,Spark(以及mapreduce、hive等)都会将大文件划分为更小的部分进行并行处理

    CSV文件可以很容易地进行分区,只要使用可拆分的压缩格式进行压缩(无,snappy-但不是gzip)

    只需告诉spark分割阈值是多少。对于S3a,将值fs.S3a.block.size设置为可以拆分的值,然后您对CSV、Avro、ORC、拼花地板和类似产品的查询将在工作人员之间拆分


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

    编辑:这现在已经过时,取决于CSV的类型。一些CSV允许在列中添加新行。这些是不可分割的。不能保证换行符只表示新行的CSV可以拆分


    仅供参考,csv本质上是单线程的。csv文件中没有额外的信息告诉读卡器任何行的起始位置,而不从起始位置读取整个文件


    如果希望在同一文件上有多个读卡器,请使用类似Parquet的格式,该格式具有行组,行组在页脚中明确定义了起始位置,独立读卡器可以读取该位置。当spark读取拼花地板文件时,它会将行组拆分为单独的任务。最终,具有适当大小的文件对spark性能非常重要。

    您不是指不同的块吗?根据行将文件拆分为多个部分-s3 api通过select命令支持这一点,但也需要在spark侧工作每个工作人员读取不同的文件。我会假设不同的文件块,你是指HDFS文件吗?不是,文件来自S3,新线符号呢?