本文介绍MaxCompute Spark作业中引用外部文件的方法,包括通过Spark参数上传和通过MaxCompute Resource上传两种方式。
适用场景
作业需要读取配置文件。
作业需要额外的JAR包或Python库。
上传文件
上传文件有两种方式:
通过Spark参数上传文件
MaxCompute Spark支持Spark社区版原生的--jars、--py-files等参数,可以在作业提交时通过这些参数将文件上传,这些文件在任务运行时会被上传到用户的工作目录下。
Spark客户端上传:直接使用
spark-submit命令行参数。参数说明
--jars:将配置的JAR包上传至Driver和Executor的当前工作目录,多个文件用逗号分隔,这些JAR包都会加入Driver和Executor的Classpath。Spark作业中直接
./your_jar_name即可引用。--files和--py-files:将配置的普通文件或Python文件上传至Driver和Executor的当前工作目录,多个文件用逗号分隔,Spark作业中直接
./your_file_name即可引用。--archives:与社区版Spark行为略有不同,多个文件用逗号分隔。配置方式为
xxx#yyy,会将配置的归档文件(例如.zip)解压到Driver和Executor的当前工作目录的子目录中。若需要将归档内容直接解压到当前目录,请使用spark.hadoop.odps.cupid.resources配置。例如,当配置为
xx.zip#yy时,应以./yy/xx/引用归档文件中的内容;当仅配置xx.zip时,应以./xx.zip/xx/引用。
DataWorks上传:添加任务需要的资源,详情参考使用DataWorks Spark。
通过MaxCompute Resource上传文件
MaxCompute Spark提供spark.hadoop.odps.cupid.resources参数,可以直接引用MaxCompute中的资源,这些资源在任务运行时会被上传到工作目录下。
使用方式
通过MaxCompute客户端上传文件,单个文件最大支持500 MB。
在Spark作业配置中添加
spark.hadoop.odps.cupid.resources参数,格式为<projectname>.<resourcename>,如果需要引用多个文件,用逗号隔开。
spark.hadoop.odps.cupid.resources参数介绍
该配置项指定了任务运行需要的MaxCompute资源,且必须要配置在
spark-default.conf中或DataWorks的配置项中才能生效,不能写在代码中。配置示例:
spark.hadoop.odps.cupid.resources=public.python-python-2.7-ucs4.zip,public.myjar.jar使用说明:
指定的资源将被下载到Driver和Executor的当前工作目录,资源下载后默认的名字是
<projectname>.<resourcename>。文件重命名:
在配置时通过
<projectname>.<resourcename>:<newresourcename>重命名。例如,spark.hadoop.odps.cupid.resources=public.myjar.jar:myjar.jar
在代码中引用文件
通过上述两种方式将文件上传到任务的当前工作目录后,在代码中读取文件示例:
val targetFile = "文件名"
val file = Source.fromFile(targetFile)
for (line <- file.getLines)
println(line)
file.close