При запуске функции python / pyspark требуется больше аргументов - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть функция, которую я определил следующим образом, вы можете видеть, что она явно требует 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 аргументов - или я схожу с ума!?);

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

Однако, когда я запускаю это, я получаю сообщение об ошибке:

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

Может ли кто-нибудь помочь мне с объяснением, почему это может быть понятно, поскольку при запуске функции я на самом деле передаю 7 аргументов, а не 6, как говорится в сообщении об ошибке?

1 Ответ

0 голосов
/ 06 сентября 2018

Я не уверен, что это причина того, что нет необходимости отправлять объекты столбца, вы можете просто передать строки:

data = data.withColumn('z', calc_z_udf('w', 'Org_Depth_Diff_S','var', 'proximity_rank_a1', 'cotravel_count_a2', 'cotravel_yt1', 'proximity_yt2'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...