-2

我在文件中创建了 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并执行一些操作。为此,我创建了一个如下所示的类: 在此处输入图像描述

但是当我尝试使用 spark 对象的功能时,我发现 spark 对象没有正确初始化,因为我没有看到 sparkSession 对象生成的方法:spark我已经__init__在屏幕截图中看到的方法中初始化了这些方法。

我在这里做的任何错误是我没有正确看到 spark 对象的方法吗?如何LoadRunner从文件中正确地向类发送和初始化 spark 对象:delta_interface_logids.py

4

1 回答 1

1

spark我猜编辑器在定义类时无法知道是哪种对象。仅仅因为您命名了类参数spark,并不一定意味着您的代码将处理一个SparkSession对象。

这是动态语言的固有“问题”(许多引号)。函数参数在运行时之外没有类型。当你用你的编辑器定义一个类时,你肯定不在运行时。

额外的

对于使用 Python >3.5 的任何人,我强烈建议使用类型注释。这些注释有助于改进代码文档,并且可以使用mypy等工具进行静态检查。

例如,在上面的代码中,我会推荐这样的东西:

def __init__(self, spark: SparkSession):
    ...
于 2020-04-20T12:29:15.963 回答