在调用UDF的函数外部定义UDF时出现Pyspark错误:方法uu getnewargs_uuu([])不存在
我已经看到了一些关于这方面的问题,但我似乎不明白为什么当我的UDF在我调用的dataframe函数之外定义时会出现这个错误在调用UDF的函数外部定义UDF时出现Pyspark错误:方法uu getnewargs_uuu([])不存在,pyspark,apache-spark-sql,aws-glue,Pyspark,Apache Spark Sql,Aws Glue,我已经看到了一些关于这方面的问题,但我似乎不明白为什么当我的UDF在我调用的dataframe函数之外定义时会出现这个错误 import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job i
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from data.utils import PropertiesGetter
glueContext = GlueContext(SparkContext.getOrCreate())
input_source = glueContext.create_dynamic_frame.from_catalog(database = "db_name", table_name = "input")
input_source_df = input_source.toDF()
test_df = PropertiesGetter(glueContext).add_subscription_properties(input_df)
在我的输入上调用PropertiesGetter的添加订阅\u属性
,当我的类看起来像这样时,不会引发错误(请注意嵌套的UDF):
但它确实抛出了一个错误
(具体地说,无法序列化对象:Py4JError:调用o116时出错。uu getnewargs_uu.Trace:
py4j.Py4JException:方法u_getnewargs_u([])不存在..
),如下所示:
class PropertiesGetter(object):
def __init__(self, gc):
...
def _add_subscription_properties(self, subscription_name):
subscription_mapping = {...}
return subscription_mapping[subscription_name]
def add_subscription_properties(self, input_df):
udf_add_subscription_properties = udf(self._add_subscription_properties, StringType())
return input_df.withColumn("subscription_properties",
udf_add_subscription_properties("subscription_type"))
...
有人能给我解释一下为什么会这样吗?我很难理解为什么这会带来不同。我在这个类中使用了一些UDF,所以我想知道嵌套这些UDF的方法是什么
另外,我知道您不需要UDF来创建应用映射的列,但只想在一个简单的示例上演示
class PropertiesGetter(object):
def __init__(self, gc):
...
def _add_subscription_properties(self, subscription_name):
subscription_mapping = {...}
return subscription_mapping[subscription_name]
def add_subscription_properties(self, input_df):
udf_add_subscription_properties = udf(self._add_subscription_properties, StringType())
return input_df.withColumn("subscription_properties",
udf_add_subscription_properties("subscription_type"))
...