本文介绍在DataWorks Notebook中使用PySpark时的配置方法,包括自定义配置、OSS存储访问、第三方Python包、JAR资源、Livy参数等。
使用自定义配置
如果执行%%maxcompute_spark后提示dataworks-magic版本需要升级,请确保升级后再使用以下功能,否则可能不生效。
启动时设置SparkConf,例如设置Livy最长空闲时间(
config表示和Livy相关的参数)和开启Schema级语法开关(spark_conf表示和Spark相关的参数),其余参数同理。%%maxcompute_spark { "config": { # cpu 和 memory 默认为1核4G "cpu": 1, "memory": "4096M", "livy.server.max.idle.time": "10m" }, "quota": "XXX", "spark_conf": { "spark.sql.catalog.odps.enableNamespaceSchema": "true" } }如果需要修改配置,只需重新执行上述代码即可。但是重启Spark Session会丢失之前的会话状态。
使用OSS存储
配置OSS访问参数:
oss_endpoint必须使用Internal内网地址,例如:oss-cn-shanghai-internal.aliyuncs.com请不要在Notebook中设置
spark.hadoop.fs.oss.impl和spark.hadoop.fs.AbstractFileSystem.oss.impl这两个参数,否则可能导致无法访问OSS。
%%maxcompute_spark
{
"spark_conf": {
"spark.hadoop.odps.cupid.trusted.services.access.list": "<bucket-name>.<oss-endpoint>",
"spark.hadoop.fs.oss.accessKeyId": "***",
"spark.hadoop.fs.oss.accessKeySecret": "***",
"spark.hadoop.fs.oss.endpoint": "<oss-endpoint>"
}
}使用第三方Python包
打包依赖:推荐使用pyodps-pack,强烈建议指定Python版本为3.11,因为Livy Spark Session默认使用Python 3.11,保持一致可避免兼容性问题。参考PySpark Python版本和依赖。
# 安装pyodps pip install pyodps # 准备requirements.txt,然后打包 pyodps-pack -r requirements.txt --python-version=3.11 -o <package-name>上传包到MaxCompute Project:
-- 在odpscmd中执行 ADD archive /path/to/<package-name> -f;配置Spark使用该包:
说明如果有多个
cupid.resources用逗号(",")隔开,该参数具体效果请参考数据互通配置。如果有多个
PYTHONPATH路径用冒号(":")隔开。当前示例中PYTHONPATH带packages子目录是因为pyodps-pack打包会自动包含该子目录,如果是其他方式打包请明确目录结构再填写PYTHONPATH。关于PYTHONPATH更多详情请参考引用用户自定义的python包。
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>", "spark.executorEnv.PYTHONPATH": "./<your_project>.<package-name>/packages", "spark.yarn.appMasterEnv.PYTHONPATH": "./<your_project>.<package-name>/packages" } }
使用JAR或其他资源包
上传资源(以tar.gz为例):
add archive /path/to/<package-name> -f;配置Spark加载资源,多个资源用英文逗号(",")分隔:
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>" } }
可与Python包配置合并使用,都填写在spark_conf参数中。
高级配置
指定Spark版本
支持的版本如下:
spark-3.1.1-odps0.47.0spark-3.4.2-odps0.48.0(默认)spark-3.5.2-odps0.49.0
设置方式:
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.spark.version": "spark-3.4.2-odps0.48.0" } }
禁用默认Python 3.11环境
如需自定义Python环境:
%%maxcompute_spark
{
"spark_conf": {
"spark.hadoop.odps.spark.alinux3.enabled": "false"
}
}使用Matplotlib绘图
先将Matplotlib打包并上传,参考使用第三方Python包,然后在Notebook中绘图:
%%spark
import matplotlib.pyplot as plt
import io, base64, json
import matplotlib
# 非必须
matplotlib.use('Agg')
# 必须在此处先创建figure(关键步骤)
fig = plt.figure()
# 示例绘图
x = [1, 2, 3, 4]
y = [20, 22, 19, 23]
plt.plot(x, y, marker='o', linestyle='--', color='b')
plt.title("Temperature Change Over Time")
plt.xlabel("Time")
plt.ylabel("Temperature")
# 渲染图像到Notebook(Livy魔法命令)
%matplot pltLivy相关配置
以下列出可以控制的Livy参数:
参数名 | 默认值 | 说明 |
| true | 是否开启权限控制,默认开启,不推荐关闭。 |
| 3d | Livy Server最长存活时间,默认3天。单位支持s、m、h、d。 |
| 1h | Livy Server最长空闲时间,默认1小时,超过该时间没有任何Spark Session就会自动关闭。 |
| 12h | Spark Session最长空闲时间,默认12小时,超过该时间没有任何Spark任务执行就会自动关闭。 |
| 12h | Spark Session过期后最长保留时间,默认12小时,关闭后超过该时间未重启将彻底销毁。 |
| 50 | 单个Livy Server可以同时存在的Session数量上限,默认50个。 |