Formatowanie kodu np. pyspark

  • Formatowanie kodu np. pyspark

    Posted by Przemysław Lelewski on 2026-07-16 at 11:02

    Cześć Wam,

    ponieważ jakiś czas temu przekonałem się, iż sformalizowane formatowanie kodu (SQL) znacznie ułatwia później jego czytanie, to chciałbym poznać Wasze opinie, przyzwyczajenia i przede wszystkim zalecenia na przykładzie kodu pyspark.

    Poniżej dwa możliwe zapisy (inaczej zapisane sortowanie zignorujcie).

    #1

    df_film.groupBy(’film’).count().orderBy(’count’, ascending=False).show()

    #2 – oczywiście odpowiednia ilość spacji z lewej dla każdej linii .xxx

    df_film
    .groupBy(’film’)
    .count()
    .orderBy(col(’count’).desc())
    .show()

    Oczywiście to banalny przykład – bardziej chodzi o zasady.

    Marek Czuma replied 1 day, 21 hours temu 2 Members · 3 Replies
  • 3 Replies
  • Marek Czuma

    Organizer
    2026-07-16 at 11:35
    5140 Exp

    Hej Przemek! Słusznie zauważyłeś, pewne dobre praktyki w zakresie syntaxu bardzo ułatwiają czytanie, ale nie tylko, bo np. debugowanie także!

    Dużo tutaj zależy od języka, ale ten przykład, gdy robimy „tasiemce”, wywołując funkcję na wyniku wywołania poprzedniej funkcji, akurat chyba są wspólne – przynajmniej w moim przekonaniu :D. Mianowicie, zawsze polecam:

    1. Pierwsze wywołanie w tej samej linijce
    2. Kolejne wywołanie funkcji w kolejnej

    W ten sposób łatwiej się czyta, ale jest coś jeszcze: kiedy program rzuci Ci błędem, a masz w jednej linijce 6 funkcji, nie wiesz o którą chodzi. Natomiast jeśli masz te linie przełamane, logi jasno pokażą gdzie jest problem;-).

    Inną sprawą, o którą kiedyś mocno walczyłem, a którą ostatnio zarzuciłem z lenistwa, jest typowanie. Wywodzę się z języków, gdzie typ jest determinujący kompilowalność kodu i bardzo nie podoba mi się, jaki bałagan wprowadzić może programowanie, gdzie typ może być taki, siaki albo jeszcze inny i nas to w zasadzie nie obchodzi (do czasu). Dlatego w Scali czy nawet Pythonie, polecam jawnie typować zmienne – przynajmniej na etapie nauki;-).

    W pythonie także głęboko odradzam robienie importów w dziwnych miejscach. Dla mnie to proste: wszystkie biblioteki dołączamy na początku pliku z kodem, nie w środku „bo tak mi się przypomniało, bo tutaj tego potrzebuję”.

    Poza tym to składnia jaka jaką proponuje dany język – np. w scali zmienne cammelCasem a w pythonie snake_casem 😉

  • Przemysław Lelewski

    Member
    2026-07-16 at 21:52
    394 Exp

    Dzięki.

    To jeszcze jedno – załączam skrypt z jednego z ćwiczeń (średnia cena pizzy itd.)

    Znajdziecie w nim dwie wersje pokazania tego samego. Jakby bardziej przemawia do mnie ta pierwsza w nawiasach, ale Pycharm (przynajmniej mój, ale czytałem, że to powszechny problem) traci kontekst i nie podpowiada metod.

    To która jest „lepsza” czyli stosowana w kodach na PROD.

    from pyspark.sql import SparkSession
    from pyspark.sql.functions import col, min, max, avg, regexp_replace, round


    def main():
    spark = SparkSession.builder \
    .appName('logika') \
    .master('local') \
    .getOrCreate()

    df = spark.read.csv(
    '../data/pizza_data.csv',
    header=True,
    inferSchema=True,
    sep=','
    )

    # get Medium pizzas and get min/max/avg
    (
    df
    .filter(df
    .Size
    .like('%Medium%')
    )
    .withColumn(
    'Price',
    regexp_replace(col('Price'), r'\$', '').cast('double')
    )
    .agg(
    min('Price').alias('min_price'),
    max('Price').alias('max_price'),
    round(avg('Price'), 2).alias('max_price')
    )
    .show()
    )

    # different way to show the same
    df \
    .filter(df
    .Size
    .like('%Medium%')
    ) \
    .withColumn(
    'Price',
    regexp_replace(col('Price'), r'\$', '').cast('double')
    ) \
    .agg(
    min('Price').alias('min_price'),
    max('Price').alias('max_price'),
    round(avg('Price'), 2).alias('max_price')
    ) \
    .show()


    if __name__ == "__main__":
    main()

    • Marek Czuma

      Organizer
      2026-07-17 at 11:21
      5140 Exp

      Do mnie też przemawia bardziej ta pierwsza – i to zdecydowanie. Natomiast ja przyszedlem tu ze Scali i ciągle traktuję pythona jako „chwilowy błąd w mojej karierze” :D. Niemniej wygląda mi to ładniej. Która jest „lepsza”? Tego nie umiem powiedzieć – sądzę, że obie są akceptowalne. Nie wiem czemu PyCharm się gubi. Ja obecnie pracuję na Databricks – niestety na notebookach. Mają one swoje zalety, ale brakuje mi takich mocno IDE’owych elementów, jak ten o którym piszesz;-)

Zaloguj się aby odpowiedzieć