Невозможно инициализировать искровой объект в классе Python - PullRequest
0 голосов
/ 20 апреля 2020

Я создал объект sparkSession в delta_interface_logids.py файле, как показано ниже:

from loader.LoadRunner import LoadRunner
from pyspark import SparkConf
from pyspark.sql import SparkSession
import pyspark.sql.functions as F


def get_data(spark):
    do_something_with_spark
    return something


if __name__ == "__main__":
    max_interface_log_id_dict = {}
    sparkConf = SparkConf().setAppName("DummyAP").set("spark.jars", "/home/usrname/jars/postgresql-42.1.4.jar ")
    spark = SparkSession.builder.config(conf=sparkConf).enableHiveSupport().getOrCreate()
    log_data = get_data(spark)
    load = LoadRunner(spark)

У меня есть вывод get_data() в переменной log_data, и я пытаюсь реализовать класс в Python это берет log_data и делает некоторую операцию. Чтобы сделать это, я создал класс, как показано ниже: enter image description here

Но когда я попытался использовать функции объекта spark, я вижу, что объект spark не инициализируется должным образом не видят методы, сгенерированные объектом sparkSession: spark, который я инициализировал в методе __init__, который можно увидеть на скриншоте.

Есть ли здесь какая-то ошибка, которую я не вижу методы искрового объекта правильно? Как правильно отправить и инициализировать объект spark в класс LoadRunner из файла: delta_interface_logids.py

1 Ответ

1 голос
/ 20 апреля 2020

Я думаю, что редактор не может знать, какой тип объекта spark, пока вы определяете свой класс. То, что вы назвали аргумент класса spark, не обязательно означает, что ваш код будет обрабатывать SparkSession объект.

Это неотъемлемая «проблема» (много кавычек) динамич c языки. Аргументы функции не имеют типов вне среды выполнения. Когда вы определяете класс с помощью вашего редактора, вы определенно не находитесь во время выполнения.

Extra

Для тех, кто использует Python> 3.5, я настоятельно рекомендую использовать аннотации типа . Эти аннотации помогают улучшить документацию кода и могут быть проверены статически с помощью таких инструментов, как mypy .

Например, в приведенном выше коде я бы порекомендовал что-то вроде этого:

def __init__(self, spark: SparkSession):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...