webentwicklung-frage-antwort-db.com.de

Col-Funktion kann im Pyspark nicht gefunden werden

In pyspark 1.6.2 kann ich col function per importieren

from pyspark.sql.functions import col

aber wenn ich versuche, es im Github-Quellcode nachzuschlagen finde ich keine col-Funktion in der functions.py-Datei, wie kann Python eine Funktion importieren, die nicht existiert?

23
Bamqf

Es existiert. Es ist einfach nicht explizit definiert. Funktionen, die aus pyspark.sql.functions exportiert werden, sind dünne Wrapper für JVM-Code. Bis auf wenige Ausnahmen, die eine spezielle Behandlung erfordern, werden sie automatisch mit Hilfe von Hilfemethoden generiert.

Wenn Sie die Quelle sorgfältig prüfen, finden Sie col unter anderen _functions . Dieses Wörterbuch wird weiter iteriert und _create_function wird zum Generieren von Wrappern verwendet. Jede generierte Funktion wird in globals direkt einem entsprechenden Namen zugeordnet.

Schließlich exportiert __all__, der eine Liste von Elementen definiert, die aus dem Modul exportiert werden, lediglich alle globals-Elemente, ausgenommen der in der Blacklist enthaltenen.

Wenn dieser Mechanismus immer noch nicht klar ist, können Sie ein Spielzeugbeispiel erstellen:

  • Erstellen Sie ein Python-Modul mit dem Namen foo.py mit folgendem Inhalt:

    # 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")]
    
  • Platzieren Sie sie irgendwo im Python-Pfad (zum Beispiel im Arbeitsverzeichnis).

  • foo importieren:

    from foo import foo
    
    foo(1)
    

Ein unerwünschter Nebeneffekt eines solchen Metaprogrammierungsansatzes besteht darin, dass definierte Funktionen von den Tools möglicherweise nicht erkannt werden, da sie lediglich von der statischen Code-Analyse abhängen. Dies ist kein kritisches Problem und kann während des Entwicklungsprozesses ignoriert werden.

Abhängig von der IDE Installation von type können Anmerkungen das Problem lösen.

29
user6910411

Ab VS Code 1.26.1 kann dieses Problem gelöst werden, indem die Einstellung python.linting.pylintArgs geändert wird:

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

Dieses Problem wurde auf github erklärt: https://github.com/DonJayamanne/pythonVSCode/issues/1418#issuecomment-411506443

3
Dmytro Balych

In Pycharm werden die Funktion col und andere als "nicht gefunden" gekennzeichnet.

enter image description here

eine Problemumgehung besteht darin, functions zu importieren und von dort aus die Funktion col aufzurufen.

zum Beispiel:

from pyspark.sql import functions as F
df.select(F.col("my_column"))
0
Vincent Claes

Ich hatte ein ähnliches Problem beim Versuch, eine PySpark-Entwicklungsumgebung mit Eclipse und PyDev einzurichten. PySpark verwendet einen dynamischen Namespace. Damit es funktioniert, musste ich PySpark hinzufügen, um "Builtins" wie folgt zu erzwingen.

Forced builtins

0
AEDWIP