apache-spark - 如何向 Livy 提交 PySpark 和 Python 作业
问题描述
我正在尝试使用 /batches 端点向 Livy 提交 PySpark 作业,但我没有找到任何好的文档。生活很轻松,因为我们将 Scala 编译的 JAR 文件提交给 Livy,并使用 className 指定作业。
对于 JAR 文件,我们使用:
data={
'file': 's3://foo-bucket/bar.jar',
'className': 'com.foo.bar',
'jars': [
's3://foo-bucket/common.jar',
],
'args': [
bucket_name,
'https://foo.bar.com',
"oof",
spark_master
],
'name': 'foo-oof bar',
'driverMemory': '2g',
'executorMemory': '2g',
'driverCores': 1,
'executorCores': 3,
'conf': {
'spark.driver.memoryOverhead': '600',
'spark.executor.memoryOverhead': '600',
'spark.submit.deployMode': 'cluster'
}
我不确定如何以类似的方式提交 PySpark 作业,其中包也有一些相对导入......有什么想法吗?
供参考,文件夹结构如下:
酒吧2
- __init__.py
- foo2.py
- 酒吧3
- __init__.py
- foo3.py
我想然后运行:
from foo2 import ClassFoo
class_foo = ClassFoo(arg1, arg2)
class_foo.auto_run()
解决方案
您可以尝试传递 pyFiles
data={
'file': 's3://foo-bucket/bar.jar',
'className': 'com.foo.bar',
'jars': [
's3://foo-bucket/common.jar',
],
"pyFiles": ["s3://<busket>/<folder>/foo2.py", "s3://<busket>/<folder>/foo3.py”]
'args': [
bucket_name,
'https://foo.bar.com',
"oof",
spark_master
],
'name': 'foo-oof bar',
'driverMemory': '2g',
'executorMemory': '2g',
'driverCores': 1,
'executorCores': 3,
'conf': {
'spark.driver.memoryOverhead': '600',
'spark.executor.memoryOverhead': '600',
'spark.submit.deployMode': 'cluster'
}
在上面的例子中
"pyFiles": ["s3://<busket>/<folder>/foo2.py", "s3://<busket>/<folder>/foo3.py”]
我尝试通过 bootstraping 将文件保存在主节点上,但注意到 Livy 会将请求随机发送到可能不存在文件的从节点。
您也可以将文件作为 .zip 传递,虽然我还没有尝试过
推荐阅读
- c++ - 如何将预编译头文件与动态库和控制台应用程序一起使用?
- c++ - C++ 重新定义错误,为什么会出现此错误?
- python - 代码最终陷入无限循环。看不出为什么
- mysql - 如何使用子查询获取结果
- sql - 无法使用 Toad 在 Oracle 12c 中选择空表或 0 行表
- python - pandas 在 Datetime 上分组,格式为 mm.dd.yyyy
- gnuplot - 如何使这个 awk 脚本简单并以循环形式在 gnuscript 中使用
- python - 无法获取 Azure 认知服务的访问令牌(用于 tts)
- notepad++ - 如果至少有两个或多个大写字母我想将它们更改为小写
- regex - 在python中查找字符串中每个唯一字符的开始和结束索引