it-swarm.com.ru

Не могу найти функцию col в pyspark

В pyspark 1.6.2 я могу импортировать функцию col

from pyspark.sql.functions import col

но когда я пытаюсь найти его в исходном коде Github я не нахожу функцию col в файле functions.py, как Python может импортировать функцию, которая не существует?

23
Bamqf

Это существует. Это просто не определено явно. Функции, экспортируемые из pyspark.sql.functions, представляют собой тонкие обертки вокруг кода JVM и, за некоторыми исключениями, требующими специальной обработки, генерируются автоматически с использованием вспомогательных методов.

Если вы внимательно проверьте источник вы найдете col в списке среди других _functions . Этот словарь далее повторяется и _create_function используется для генерации оболочек. Каждой сгенерированной функции непосредственно присваивается соответствующее имя в globals.

Наконец, __all__, который определяет список элементов, экспортируемых из модуля, просто экспортирует все globals, кроме тех, которые содержатся в черном списке.

Если этот механизм все еще не ясен, вы можете создать игрушечный пример:

  • Создайте модуль Python с именем foo.py со следующим содержимым:

    # Creates a function assigned to the name foo
    globals()["foo"] = lambda x: "foo {0}".format(x)
    
    # Exports all entries from globals which start with foo
    __all__ = [x for x in globals() if x.startswith("foo")]
    
  • Поместите его где-нибудь на пути Python (например, в рабочем каталоге).

  • Импорт foo:

    from foo import foo
    
    foo(1)
    

Нежелательный побочный эффект такого подхода метапрограммирования состоит в том, что определенные функции могут не распознаваться инструментами, в зависимости только от статического анализа кода. Это не критическая проблема и может быть безопасно проигнорировано в процессе разработки.

В зависимости от IDE установка введите аннотации может решить проблему.

29
user6910411

Начиная с VS Code 1.26.1 это можно решить, изменив настройку python.linting.pylintArgs:

"python.linting.pylintArgs": [
        "--generated-members=pyspark.*",
        "--extension-pkg-whitelist=pyspark",
        "--ignored-modules=pyspark.sql.functions"
    ]

Эта проблема была объяснена на github: https://github.com/DonJayamanne/pythonVSCode/issues/1418#issuecomment-411506443

3
Dmytro Balych

Я столкнулся с подобной проблемой, пытаясь настроить среду разработки PySpark с Eclipse и PyDev. PySpark использует динамическое пространство имен. Чтобы заставить его работать, мне нужно было добавить PySpark в «Force Builtins», как показано ниже.

Forced builtins

0
AEDWIP