--archives、--files、--py-files和sc.addFile以及sc.addPyFile相当混乱,有人能解释清楚吗?
--archives
--files
--py-files
sc.addFile
sc.addPyFile
jyztefdp1#
这些选项确实分散在各处。一般来说,通过--files或--archives添加数据文件,通过--py-files添加代码文件。后者将被添加到类路径中(参见此处),以便导入和使用。可以想象,CLI参数实际上是由addFile和addPyFiles函数处理的(参见此处)
addFile
addPyFiles
在后台,pyspark调用更通用的spark-submit脚本。通过将逗号分隔的列表传递给--py-files,可以将Python .zip、.egg或.py文件添加到运行时路径
pyspark
spark-submit
--files和--archives选项支持使用#指定文件名,类似于Hadoop。例如,您可以指定:--files localtest.txt#appSees.txt,这会将您在本地命名为localtest. txt的文件上传到HDFS,但它将通过名称appSees. txt链接到HDFS,并且您的应用程序在YARN上运行时应使用appSees. txt这样的名称来引用它。
addFile(path)在每个节点上添加一个要与此Spark作业一起下载的文件。传递的路径可以是本地文件、HDFS(或其他Hadoop支持的文件系统)中的文件,也可以是HTTP、HTTPS或FTP URI。addPyFile(path)为将来要在此SparkContext上执行的所有任务添加.py或.zip依赖项。传递的路径可以是本地文件、HDFS(或其他Hadoop支持的文件系统)中的文件或HTTP、HTTPS或FTP URI。
addFile(path)
addPyFile(path)
6jygbczu2#
这也是困惑我早些时候,经过实验与Spark3.0今天,我终于明白这些选项是如何工作的。我们可以把这些选择分成两类。第一类是数据文件,数据文件意味着spark只将指定的文件添加到容器中,不再执行进一步的命令.这类中有两个选项:
zip
tar
第二类是代码依赖,在spark应用程序中,代码依赖可以是JVM依赖或者是python依赖。
--jars
CLASSPATH
.py
.egg
.zip
PYTHONPATH
sc.addPyFile是此应用程序的编程API。PS:对于单个的.py文件,spark会将其添加到__pyfiles__文件夹中,其他的会添加到CWD中。这四个选项都可以指定多个文件,用,拆分,每个文件可以通过{URL}#{ALIAS}指定一个别名。不要在--py-files选项中指定别名,因为spark不会将别名添加到PYTHONPATH中。顺便说一句,每个文件支持多个方案,如果不指定,默认为file:
__pyfiles__
,
{URL}#{ALIAS}
file
cluster
local
2条答案
按热度按时间jyztefdp1#
这些选项确实分散在各处。
一般来说,通过
--files
或--archives
添加数据文件,通过--py-files
添加代码文件。后者将被添加到类路径中(参见此处),以便导入和使用。可以想象,CLI参数实际上是由
addFile
和addPyFiles
函数处理的(参见此处)在后台,
pyspark
调用更通用的spark-submit
脚本。通过将逗号分隔的列表传递给
--py-files
,可以将Python .zip、.egg或.py文件添加到运行时路径--files
和--archives
选项支持使用#指定文件名,类似于Hadoop。例如,您可以指定:--files localtest.txt#appSees.txt,这会将您在本地命名为localtest. txt的文件上传到HDFS,但它将通过名称appSees. txt链接到HDFS,并且您的应用程序在YARN上运行时应使用appSees. txt这样的名称来引用它。addFile(path)
在每个节点上添加一个要与此Spark作业一起下载的文件。传递的路径可以是本地文件、HDFS(或其他Hadoop支持的文件系统)中的文件,也可以是HTTP、HTTPS或FTP URI。addPyFile(path)
为将来要在此SparkContext上执行的所有任务添加.py或.zip依赖项。传递的路径可以是本地文件、HDFS(或其他Hadoop支持的文件系统)中的文件或HTTP、HTTPS或FTP URI。6jygbczu2#
这也是困惑我早些时候,经过实验与Spark3.0今天,我终于明白这些选项是如何工作的。
我们可以把这些选择分成两类。
第一类是数据文件,数据文件意味着spark只将指定的文件添加到容器中,不再执行进一步的命令.这类中有两个选项:
--archives
:使用此选项,您可以提交归档文件,Spark将为您提取其中的文件,Spark支持zip
、tar
......格式。--files
:使用此选项,您可以提交文件,spark会将其放在container中,不会执行任何其他操作。sc.addFile
是此选项的编程api。第二类是代码依赖,在spark应用程序中,代码依赖可以是JVM依赖或者是python依赖。
--jars
:这个选项用来提交JVM依赖的Jar文件,spark会自动把这些Jar添加到CLASSPATH
中,这样你的JVM就可以加载它们了。--py-files
:该选项用于提交Python依赖项,它可以是.py
、.egg
或.zip
。Spark会将这些文件添加到PYTHONPATH
中,以便您Python解释器可以找到它们。sc.addPyFile
是此应用程序的编程API。PS:对于单个的
.py
文件,spark会将其添加到__pyfiles__
文件夹中,其他的会添加到CWD中。这四个选项都可以指定多个文件,用
,
拆分,每个文件可以通过{URL}#{ALIAS}
指定一个别名。不要在--py-files
选项中指定别名,因为spark不会将别名添加到PYTHONPATH
中。顺便说一句,每个文件支持多个方案,如果不指定,默认为
file
:file
:驱动程序将通过HTTP将这些文件传输到Executor,如果在cluster
部署模式下,Spark将首先将这些文件上传到集群驱动程序。local
:该文件应作为本地文件存在于每个工作节点上。参考