在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
,然后在每个作业及以下类中的__init__.py
文件中将其传递给构造函数。除SparkSession
UDF之外,使用此GROUP_MAP
调用的所有功能均按预期工作。注意:有一个标量Pandas UDF,可以正常工作。
无论如何,所以我在analyze
中有一个__init__.py
函数,它调用Manager.py
。 Manger
然后继续呼叫Utility.py
,ExtractFeatures.py
和Modelling.py
。一切正常,直到我在Modelling
中的数据帧上调用动作为止。我在其他地方都使用过动作进行测试,而且效果很好。
在我的Modelling
类中,我调用下面的Pandas 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()
,效果很好。