Python PySpark熊猫联合会:';非类型';对象没有属性'_jvm';错误
使用下面概述的文件结构在Dataproc上运行PySpark(Spark版本2.4.6)作业: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
├── 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'未定义
。从中复制示例。