Spark - 如何并行读取多个文件作为数据帧?
Spark - How to read multiple files as DataFrames in parallel?
我有一个已定义的 S3 文件路径列表,我想将它们作为数据帧读取:
ss = SparkSession(sc)
JSON_FILES = ['a.json.gz', 'b.json.gz', 'c.json.gz']
dataframes = {t: ss.read.json('s3a://bucket/' + t) for t in JSON_FILES}
上面的代码有效,但是以一种意想不到的方式。代码提交到Spark集群时,一次只读取一个文件,只占用一个节点。
有没有更高效的读取多个文件的方法?一种让所有节点同时工作的方法?
更多详情:
- PySpark - Spark 2.2.0
- 存储在 S3 上的文件
- 每个文件每行包含一个 JSON 个对象
- 文件已压缩,从扩展名可以看出
要在 Spark 中读取多个输入,请使用通配符。无论您是构建数据框还是 rdd,都是如此。
ss = SparkSession(sc)
dataframes = ss.read.json("s3a://bucket/*.json.gz")
问题是:我不了解Spark的运行时架构。 Spark 有 "workers" 的概念,如果我现在更好地理解它(不要相信我),它能够并行处理事情。当我们提交一个 Spark 作业时,我们可以同时设置两个东西,即工作人员的数量和他们可以利用的并行度级别。
如果您使用的是 Spark 命令 spark-submit
,这些变量表示为以下选项:
--num-executors
:类似于workers 的概念
--executor-cores
:一个 worker 应该使用多少 CPU 个内核
This 是一份帮助我理解这些概念以及如何调整它们的文档。
回到我的问题上来,在那种情况下,我会为每个文件配备一名工作人员。
我有一个已定义的 S3 文件路径列表,我想将它们作为数据帧读取:
ss = SparkSession(sc)
JSON_FILES = ['a.json.gz', 'b.json.gz', 'c.json.gz']
dataframes = {t: ss.read.json('s3a://bucket/' + t) for t in JSON_FILES}
上面的代码有效,但是以一种意想不到的方式。代码提交到Spark集群时,一次只读取一个文件,只占用一个节点。
有没有更高效的读取多个文件的方法?一种让所有节点同时工作的方法?
更多详情:
- PySpark - Spark 2.2.0
- 存储在 S3 上的文件
- 每个文件每行包含一个 JSON 个对象
- 文件已压缩,从扩展名可以看出
要在 Spark 中读取多个输入,请使用通配符。无论您是构建数据框还是 rdd,都是如此。
ss = SparkSession(sc)
dataframes = ss.read.json("s3a://bucket/*.json.gz")
问题是:我不了解Spark的运行时架构。 Spark 有 "workers" 的概念,如果我现在更好地理解它(不要相信我),它能够并行处理事情。当我们提交一个 Spark 作业时,我们可以同时设置两个东西,即工作人员的数量和他们可以利用的并行度级别。
如果您使用的是 Spark 命令 spark-submit
,这些变量表示为以下选项:
--num-executors
:类似于workers 的概念
--executor-cores
:一个 worker 应该使用多少 CPU 个内核
This 是一份帮助我理解这些概念以及如何调整它们的文档。
回到我的问题上来,在那种情况下,我会为每个文件配备一名工作人员。