Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在调用UDF的函数外部定义UDF时出现Pyspark错误:方法uu getnewargs_uuu([])不存在_Pyspark_Apache Spark Sql_Aws Glue - Fatal编程技术网

在调用UDF的函数外部定义UDF时出现Pyspark错误:方法uu getnewargs_uuu([])不存在

在调用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

我已经看到了一些关于这方面的问题,但我似乎不明白为什么当我的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 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"))

    ...