вопрос pySpark: карта / распараллеливание не работает должным образом - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть функция python, которая принимает данные, обрабатывает данные и возвращает значение.

Другая функция python, которая принимает кортеж данных и передаваемый фрейм данных, обрабатывает данные и сохраняет их на диске.

За исключением карты / распараллеливания, весь другой код использует pandas

Так я изначально написал код

Class X:
    Def DoSomething(tup):
        Process Data &
        Return X

    Def DoAnotherThing(tup):
        Process Data and Save 

    Def main():

        Create tupList ( created a List of tuples)   

        rddData = spCon.parallelize(tupList).map(lambda p: self. DoSomething (p))

        t = rddData.collect()

if __name__ == "__main__":
    main(args)

Приведенный выше код не работает, если Я вызываю основной, как указано выше. Функция DoSomething вернет все None

Если я изменю код для реализации непосредственно в main

Def DoSomething(tup):
    Process Data &
    Return X

Def DoAnotherThing(tup):
    Process Data and Save 


if __name__ == "__main__":
    Create tupList ( created a List of tuples)   

    rddData = spCon.parallelize(tupList).map(lambda p: DoSomething (p))

    t = rddData.collect()

Однако приведенный выше код возвращает соответствующие данные.

Может кто-нибудь, пожалуйста, помогите мне понять, почему я вижу такое поведение.

Причина, по которой я пытаюсь создать экземпляр класса и вызывать main, заключается в том, что я пытаюсь передать аргументы в сценарий python, но я не уверен, что смогу сделать это без вызова main () функция категорически.

1 Ответ

0 голосов
/ 27 апреля 2020

Смотрите этот простой пример, чтобы помочь вам

class X():
    def __init__(self, sc):
        data = [1, 2, 3]
        rddData = sc.parallelize(data).map(lambda p: self.DoSomething(a=p))
        self.t = rddData.collect()

    def DoSomething(self, a):
        return a + 1

ex = X(sc=sc)
ex.t
# [2, 3, 4]
ex.DoSomething
# <bound method X.DoSomething at yadda yadda 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...