Durchsetzung von Schema für den PYSPARK -JobPython

Python-Programme
Anonymous
 Durchsetzung von Schema für den PYSPARK -Job

Post by Anonymous »

Wir haben eine Reihe unterschiedlicher PYSPark -Jobs und haben eine Verwendung, bei der zwei Jobs miteinander verkettet werden können, um einen separaten 3. Job zu bilden. Wenn Sie also einen Job haben "a" und einen anderen Job 'B', können diese Jobs miteinander verkettet werden, um einen anderen Job "C" zu bilden. Offensichtlich kann dies nur dann geschehen, wenn das Ausgabedatenframe -Schema von 'A' mit dem Datenfreamschema mit 'B' kompatibel ist. Genau das erreicht die Dataset -API jedoch leider, dass Funke den Datensatz für Python nicht verteilt, verständlicherweise, weil Python dynamisch getippt wird. Mit dem Aufkommen von Typierungen können wir jedoch eine Art Kompilierungszeitsicherheit erreichen, und ich kann mir einige Möglichkeiten vorstellen, dies zu erreichen, eine durch Komposition durch die andere durch die Vererbung.

Code: Select all

from typing import TypeVar, Generic
from pyspark.sql import DataFrame
from enum import Enum

#Marker Enum
class Schema(Enum):
pass

T = TypeVar("T", bound = Schema)

class CustomDataSet(Generic[T]):
def __init__(self, dataframe: DataFrame) -> None:
self.dataframe = dataframe

Jetzt kann ich MyPy verwenden und Komposition wie CustomDataset [MySchema] (DataFrame) verwenden . Das Problem hier draußen ist, dass MySchema kein DataFrame -Objekt ist und dies für jemanden verwirrt sein kann.import abc
from enum import Enum

#Marker Enum
class Schema(Enum):
pass

class MyInterface(metaclass=abc.ABCMeta):

@abc.abstractmethod
def get_input_schema() -> Schema:
raise NotImplementedError

@abc.abstractmethod
def get_output_schema() -> Schema:
raise NotImplementedError

< /code>
Jetzt können die beiden Jobs 'A' und 'B' die obige Schnittstelle implementieren. Dies scheint eine ziemlich ausführliche Art zu tun, Dinge zu tun und keinen Fan der Erbe zu fühlen.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post