Pandas vs. Pyspark

Ich arbeite ja Hauptsächlich mit Daten und diese konvertiert man ja nun in Python, Python wäre nicht Python wenn es nicht viele fertige Packages gebe. Im Dataengineering hat sich PySpark anscheinend bewährt und im Data Science Teams kennen sich viele gut mit Pandas aus. Wie auch immer, ich fand mich mit Pandas schnell zurecht. Und versuche mich nun etwas in PySpark einzulesen um auch diese Welt ein bissi besser zu verstehen.

Aber es gibt dann auch sowas wie:

Also im Grunde ist es bald völlig egal was man wie macht. ;-) Hauptsache man tut etwas.

Aber keine Sorge.. trotzdem bin ich immer froh wenn ich mit SQL und Datenbank Funktionalität arbeiten kann.

salü

from sqlalchemy import create_engine
import re
import pandas as pd
import datetime as dt
import hashlib

filename = r"2021_01_meinexcel.xls"

# Extract Filedate from Filename
extract_dates = re.compile("[0-9]{4}\_[0-9]{2}").findall
yearmonth = extract_dates(filename)[0].split('_')


Dataframe=pd.read_excel(filename,header=4,sheet_name='Daten')
Dataframe.fillna(Dataframe.mean())
Dataframe = Dataframe.dropna(how='all')

#Filtere die Zeilen raus wo die Spalte Linie gleich STRB lauten  
Dataframe = Dataframe[Dataframe['Linie'] != 'STRB' ] 

#Filtere die Zeilen raus wo die Spalte Linie null ist  
Dataframe = Dataframe[~Dataframe['Linie'].isnull()] 

#Erzeuge ein Hilfsspalte für den Stichtag (Jahr und Monat aus dem Filenamen)
Dataframe['stichtag'] = yearmonth[0] + yearmonth[1].rjust(2,'0') + '01'
Dataframe['stichtag'] = pd.to_datetime(Dataframe['stichtag'], format='%Y%m%d')

#Erzeuge ein Hilfsspalte für den Standard Salt (dass ist kein Must-Have)
Dataframe['salt'] = 12345

#Ermittle die Spaltenliste
cols = list(Dataframe)

#füge ein hashtag ein um hashes auch richtig zu berechnen wenn spalten vertauscht werden oder null sind
Dataframe['combined'] = Dataframe[cols].apply(lambda row: '#'.join(row.values.astype(str)), axis=1)
Dataframe['dm_hash'] = Dataframe['combined'].apply(
    lambda x: 
        hashlib.sha256(x.encode()).hexdigest()
)

#drop helper columns from dataframe
Dataframe.drop(columns=['salt', 'combined'], axis=1,inplace=True)
# add timestamp and metadata infos
Dataframe['dm_timestamp'] = dt.datetime.now()
Dataframe['dm_metadata'] = filename

#Verbinde dich zur Postgres Datenbank
dbc = create_engine('postgresql://uname:pwdname@localhost:5433/myDB', echo = True)
#dbc.execute('SET search_path TO myschema'.format(schema=myschema))

# Erzeuge eine Tabelle und schreibe die daten rein https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html
Dataframe.to_sql('myTable',dbc,index=False,if_exists='replace',schema="myschema")

# machen wir es auch mit SCD2?
#https://medium.com/analytics-vidhya/scd-type2-implementation-in-python-95bb08878ce2