如何解决使用upload_jars函数获取GeoSpark错误
我正在尝试在AWS EMR集群中运行GeoSpark。代码是:
# coding=utf-8
from pyspark.sql import SparkSession
import pyspark.sql.functions as f
import pyspark.sql.types as t
from geospark.register import GeoSparkRegistrator
from geospark.utils import GeoSparkKryoRegistrator
from geospark.register import upload_jars
import config as cf
import yaml
if __name__ == "__main__":
# Read files
with open("/tmp/param.yml",'r') as ymlfile:
param = yaml.load(ymlfile,Loader=yaml.SafeLoader)
# Register jars
upload_jars()
# Creation of spark session
print("Creating Spark session")
spark = SparkSession \
.builder \
.getOrCreate()
GeoSparkRegistrator.registerAll(spark)
在upload_jars()
函数中出现以下错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/findspark.py",line 143,in init
py4j = glob(os.path.join(spark_python,"lib","py4j-*.zip"))[0]
IndexError: list index out of range
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "geo_processing.py",line 21,in <module>
upload_jars()
File "/usr/local/lib/python3.7/site-packages/geospark/register/uploading.py",line 39,in upload_jars
findspark.init()
File "/usr/local/lib/python3.7/site-packages/findspark.py",line 146,in init
"Unable to find py4j,your SPARK_HOME may not be configured correctly"
Exception: Unable to find py4j,your SPARK_HOME may not be configured correctly
如何解决此错误?
解决方法
解决方案
您应该从代码中删除 upload_jars()
并以另一种方式加载 jar,方法是将它们复制到 SPARK_HOME
(从 emr-4.0.0 开始在 /usr/lib/spark
)作为EMR 引导操作的一部分或使用 spark-submit
选项的 --jars
命令。
说明
我无法让 upload_jars()
函数在多节点 EMR 集群上工作。根据{{3}},upload_jars()
:
使用 findspark Python 包将 jar 文件上传到执行器和节点。为避免一直复制,jar文件可以放在目录SPARK_HOME/jars或Spark配置文件中指定的任何其他路径。
Spark 在 EMR 上以 YARN 模式安装,这意味着它仅安装在主节点上,而不安装在核心/任务节点上。因此,findspark
不会在核心/任务节点上找到 Spark,因此您会收到错误 Unable to find py4j,your SPARK_HOME may not be configured correctly
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。