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,如何从HDFS中的不同文件夹并行读取多个文件?_Apache Spark - Fatal编程技术网

Apache spark 使用Spark,如何从HDFS中的不同文件夹并行读取多个文件?

Apache spark 使用Spark,如何从HDFS中的不同文件夹并行读取多个文件?,apache-spark,Apache Spark,我有3个文件夹,其中包含HDFS中3种不同模式的csv文件。所有3个文件都很大(几GB)。我想并行读取文件并并行处理其中的行。如何使用Spark在纱线簇上实现这一点?在“并行读取文件并并行处理其中的行”下,您是什么意思?Spark根据应用程序配置(num executors、executor cores…)自行并行处理数据。 如果你的意思是“同时开始读取文件并同时处理”,我很确定,你不能明确地理解它。它需要一些功能来影响应用程序的DAG,但正如我所知,唯一的方法是隐式地将数据过程构建为一系列转换

我有3个文件夹,其中包含HDFS中3种不同模式的csv文件。所有3个文件都很大(几GB)。我想并行读取文件并并行处理其中的行。如何使用Spark在纱线簇上实现这一点?

在“并行读取文件并并行处理其中的行”下,您是什么意思?Spark根据应用程序配置(num executors、executor cores…)自行并行处理数据。 如果你的意思是“同时开始读取文件并同时处理”,我很确定,你不能明确地理解它。它需要一些功能来影响应用程序的DAG,但正如我所知,唯一的方法是隐式地将数据过程构建为一系列转换/操作。
Spark的设计也是这样的,如果您的资源分配允许,它可以“开箱即用”地同时执行多个阶段。

如果您想单独处理所有数据,您可以始终编写3个Spark作业来单独处理它们,并在群集中并行执行它们。有几种方法可以并行运行所有3个作业。最直接的方法是使用oozie工作流和3个并行子工作流


现在,如果要在同一作业中处理3个数据集,则需要按顺序读取它们。之后,您可以处理数据集。当您使用spark操作处理多个数据集时,spark会为您并行化它们。操作的结束将发送给执行者,所有操作都将并行工作。

假设您使用Scala,使用hdfs客户端和
.par
便利方法创建文件的并行集合,然后将结果映射到
spark.read
并调用一个操作--voilá,如果集群中有足够的资源,将并行读取所有文件。在最坏的情况下,Spark的作业调度器将改变某些任务的执行,以最小化等待时间

如果您没有足够的工人/执行者,您将不会获得多少收益,但如果您有,您可以充分利用这些资源,而不必等待每项工作完成,然后再发送下一项工作


由于延迟评估,这可能会发生,具体取决于您如何处理数据——但您可以使用并行或未来强制并行执行多个操作/作业。

我最近遇到过类似的情况。
您可以将CSV列表及其路径传递给spark read api,如
spark.read.json(输入文件路径)
()。这将在单个数据帧中加载所有文件,最终执行的所有转换将由多个执行器并行完成,具体取决于您的spark配置。

是的,我想知道是否可以以某种方式并行处理这3个数据集。从对这个问题的回答来看,似乎唯一的方法是运行单独的作业。谢谢。,