Apache spark 在spark中是否可以并行读取大型S3CSV文件?
通常,spark文件保存在多个部分中,允许每个工作人员读取不同的文件。 处理单个文件时是否有类似的解决方案? s3提供了允许这种行为的select APIApache 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似乎支持此API(),但这似乎只与优化查询相关,而不是用于并行阅读S3选择与您的用例无关
除非您的工作人员每行进行大量计算,否则在这样做之前就有一个最小的块大小。实验。编辑:这现在已经过时,取决于CSV的类型。一些CSV允许在列中添加新行。这些是不可分割的。不能保证换行符只表示新行的CSV可以拆分
仅供参考,csv本质上是单线程的。csv文件中没有额外的信息告诉读卡器任何行的起始位置,而不从起始位置读取整个文件
如果希望在同一文件上有多个读卡器,请使用类似Parquet的格式,该格式具有行组,行组在页脚中明确定义了起始位置,独立读卡器可以读取该位置。当spark读取拼花地板文件时,它会将行组拆分为单独的任务。最终,具有适当大小的文件对spark性能非常重要。您不是指不同的块吗?根据行将文件拆分为多个部分-s3 api通过select命令支持这一点,但也需要在spark侧工作每个工作人员读取不同的文件。我会假设不同的文件块,你是指HDFS文件吗?不是,文件来自S3,新线符号呢?