Function 运行python/pyspark函数时需要更多参数

Function 运行python/pyspark函数时需要更多参数,function,pyspark,Function,Pyspark,我有一个函数,我定义如下,你可以看到它需要7个参数 def calc_z(w,S,var,a1,a2,yt1,yt2): mu = w*S sigma = mt.sqrt(var) z = np.random.normal(mu,sigma) u = [a1,a2,z] yt = [yt1,yt2,1] thetaset = np.random.rand(len(u)) m = [i for i in range(len(u))]

我有一个函数,我定义如下,你可以看到它需要7个参数

def calc_z(w,S,var,a1,a2,yt1,yt2):

    mu = w*S
    sigma = mt.sqrt(var)
    z = np.random.normal(mu,sigma)
    u = [a1,a2,z]
    yt = [yt1,yt2,1]
    thetaset = np.random.rand(len(u))
    m = [i for i in range(len(u))]

    max_iter = 30

#Calculate E-step
    for i in range(max_iter):

        print 'Iteration:', i
        print 'z:', z
        print 'thetaset', thetaset

        devLz = eq6(var,w,S,z,yt,u,thetaset,m)
        dev2Lz2 = eq9(var,thetaset,u)

#Calculate M-Step
        z = z - (devLz / dev2Lz2)
        w = lambdaw * z

        for i in range(len(thetaset)):

            devLTheta = eq7(yt,u,thetaset,lambdatheta)
            dev2LTheta2 = eq10(thetaset,u,lambdatheta)            

            thetaset = thetaset - (devLTheta / dev2LTheta2)

    return z
我正在使用pyspark,所以我将其转换为udf

calc_z_udf = udf(calc_z,FloatType())
然后按如下方式运行它(在这里我很明显地传递了7个参数——或者我疯了!?)

然而,当我运行此程序时,我得到一个错误,该错误指出:

TypeError: calc_z() takes exactly 7 arguments (6 given)

有谁能帮我解释一下为什么会这样,因为很明显,当我运行函数时,我实际上传递了7个参数,而不是错误状态下的6个参数?

我不确定这是不是不需要发送列对象的原因。您可以只传递字符串:

data = data.withColumn('z', calc_z_udf('w', 'Org_Depth_Diff_S','var', 'proximity_rank_a1', 'cotravel_count_a2', 'cotravel_yt1', 'proximity_yt2'))
data = data.withColumn('z', calc_z_udf('w', 'Org_Depth_Diff_S','var', 'proximity_rank_a1', 'cotravel_count_a2', 'cotravel_yt1', 'proximity_yt2'))