Python PySpark熊猫联合会:';非类型';对象没有属性'_jvm';错误

Python PySpark熊猫联合会:';非类型';对象没有属性'_jvm';错误,python,pandas,apache-spark,pyspark,apache-spark-sql,Python,Pandas,Apache Spark,Pyspark,Apache Spark Sql,使用下面概述的文件结构在Dataproc上运行PySpark(Spark版本2.4.6)作业: dataproc ├── README.md ├── zipfolders.sh ├── src │ ├── main.py │ ├── jobs │ │ └── myjob │ │ └── __init__.py │ │ └── Manager.py │ │ └── Modelling.py │ │ └── Extrac

使用下面概述的文件结构在Dataproc上运行PySpark(Spark版本2.4.6)作业:

dataproc
├── README.md
├── zipfolders.sh
├── src
│   ├── main.py
│   ├── jobs
│   │   └── myjob
│   │       └── __init__.py
│   │       └── Manager.py
│   │       └── Modelling.py
│   │       └── ExtractFeatures.py
│   │       └── Utility.py
│   ├── shared
│   │       └── __init__.py
│   │       └── ...
SparkSession
main.py
文件中创建,然后在每个作业的
\uuuu init\uuuuuu.py
文件和以下类中传递给构造函数。使用此
SparkSession
调用的所有函数均按预期工作,但
GROUP\u MAP
UDF除外。注意:有一个标量UDF,工作正常

无论如何,我在
\uuu init\uuuuuuuuuuuuupy
中有一个
分析
函数,它调用
管理器.py
manager
然后继续调用
Utility.py
ExtractFeatures.py
modeling.py
。一切正常,直到我在
modeling
中调用对数据帧的操作。我在其他任何地方都使用了动作进行测试,而且效果很好

在我的
modeling
类中,我调用以下UDF,然后对其使用
show()
操作

    def groupedUDF(self, data, grp_key):
        print("checkpoint???")
        schema = StructType([
            StructField("str_site_num", LongType(), True),
            StructField("artcl_num", LongType(), True),
            StructField("pe_val", DoubleType(),True)
        ])
        @pandas_udf(schema, PandasUDFType.GROUPED_MAP)
        def run_artcl_mdl(keys : list, df_artcl : pd.DataFrame):
            return pd.DataFrame({'str_site_num': 'testsite', 'artcl_num': 'testarticle', 'pe_val': 1.0}, index=[0])
        res_df = data.groupby(*grp_key).apply(run_artcl_mdl)
        res_df_cached = res_df.persist()
        return res_df_cached
在返回的数据帧上运行
show()
,会出现错误

AttributeError: 'NoneType' object has no attribute '_jvm'
我在
SparkSession
前后都没有运行任何断言,也没有返回任何错误。任何帮助都将不胜感激


完整日志太长,无法附加,但我在同一个日期框上调用了
printSchema()
右键
show()
,效果很好。

文档中有一条说明:如果返回一个用字典构造的新pandas.DataFrame,建议按名称显式索引列,以确保位置正确,或者使用OrderedDict。。在您的情况下,您可以执行以下操作:
return pd.DataFrame({…},columns=[…])
其中列名的顺序必须与pandas\u udf函数的返回模式匹配。感谢您的回复!我试过了,但还是犯了同样的错误。事实上,我认为熊猫UDF没有被正确注册?我注释掉了我编写的UDF,并添加了一个作为文档一部分的UDF,这是我收到的错误消息:
NameError:name'normalize'未定义
。从中复制示例。