无法初始化Python类中的spark对象
我在无法初始化Python类中的spark对象,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我在delta_interface_logids.py文件中创建了sparkSession对象,如下所示: 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
delta_interface_logids.py
文件中创建了sparkSession对象,如下所示:
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)
我在变量log\u data
中有get\u data()
的输出&我试图用Python实现一个类,该类接受log\u data
并执行一些操作。为此,我创建了一个类,如下所示:
但是当我尝试使用spark对象的功能时,我发现spark对象没有正确初始化,因为我没有看到sparkSession对象生成的方法:spark
,我在屏幕截图中看到的\uuu init\uuu
方法中初始化了它
我在这里是否犯了错误,没有正确地看到spark对象的方法?
如何从文件:
delta\u interface\u logids.py
中正确地将spark对象发送和初始化到类LoadRunner
,我想在定义类时,编辑器无法知道spark是哪种对象。仅仅因为您将类参数命名为spark
,并不一定意味着您的代码将处理SparkSession
对象
这是动态语言固有的“问题”(许多引用)。函数参数在运行时之外没有类型。当您使用编辑器定义类时,您肯定不在运行时
额外的
对于任何使用Python>3.5的人,我强烈建议使用。这些注释有助于改进代码文档,并且可以使用工具(如)进行静态检查
例如,在上面的代码中,我建议如下:
def __init__(self, spark: SparkSession):
...
我理解你想说的,但在这种情况下,项目中的任何地方和文件中都没有gaurantee,IDE将识别我用于生成其方法的对象类型。代码没有问题吗?@Metadata,到目前为止,您的代码没有问题。@Metadata,如果您使用的是Python>3.5,我强烈建议您使用类型批注。这解决了问题,但是如果有人使用的版本低于3.5,看起来他们必须信任自己的编码能力,少一点依赖IDE。Python3.4已经远远超过了它的寿命。Spark具有非常好的性能,可以独立于版本使用。