Получение ошибки GeoSpark с помощью функции upload_jars

#python #amazon-web-services #apache-spark #amazon-emr #geospark

#python #amazon-веб-сервисы #apache-spark #amazon-emr #geospark

Вопрос:

Я пытаюсь запустить GeoSpark в кластере AWS EMR. Код является:

 #  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
  

Как я могу устранить эту ошибку?

Ответ №1:

Решение

Вам следует удалить upload_jars() из своего кода и вместо этого загрузить jar-файлы альтернативным способом, либо скопировав их в SPARK_HOME (по /usr/lib/spark состоянию на emr-4.0.0) как часть действия начальной загрузки EMR, либо в вашей spark-submit команде, используя --jars опцию.

Объяснение

Мне не удалось заставить upload_jars() функцию работать на многоузловом кластере EMR. Согласно документации geospark, upload_jars() :

использует пакет findspark Python для загрузки файлов jar исполнителю и узлам. Чтобы избежать постоянного копирования, файлы jar можно поместить в каталог SPARK_HOME / jars или по любому другому пути, указанному в файлах конфигурации Spark.

Spark установлен в режиме YARN на EMR, что означает, что он установлен только на главном узле, а не на узлах ядра / задачи. Таким образом, findspark не будет найден Spark на узлах ядра / задачи, и поэтому вы получите ошибку Unable to find py4j, your SPARK_HOME may not be configured correctly .