<jupyter_start><jupyter_text>PySpark og PythonPySpark er et programmeringsspråk (Python API) skrevet i Python for å støtte [Apache Spark](http://spark.apache.org/). Apache Spark er et *open sourc* rammeverk for distribuert prosessering.>"PySpark is the collaboration of Apache Spark and Python. Apache Spark is an open-source cluster-computing framework, built around speed, ease of use, and streaming analytics whereas Python is a general-purpose, high-level programming language". [PySpark Programming – Integrating Speed With Simplicity](https://www.edureka.co/blog/pyspark-programming/:~:text=i.e.%2C%20PySpark%20Programming.-,PySpark%20Programming,%2C%20high%2Dlevel%20programming%20language.)I og med at PySpark er skrevet i Python er alle innebygde funksjoner i Python også tilgjengelig i PySpark.   Objektorientert programmeringPython er et objektorienterte programmeringsspråk for generelle formål (a general purpose language). >Objektorientert programmering (OOP) ble oppfunnet (eller oppdaget som Nygaard pleide å si) av <NAME> og <NAME> på Norsk Regnesentral på midten av sekstitallet i form av programmeringsspråket Simula. ([Objektorientering ++](https://www.hannemyr.com/no/oop.php) av Gisle Hannemyr)Objektorienteringen er en måte å strukturere programmer på:- Samle relaterte data og kode for å manipulere dataene i **objekter**- Objektene tilbyr resten av programmet (og andre objekter) et sett  **metoder** (grensenitt til å manipulerer dataene i objektet)- Hvordan objektet representerer og manipulerer sine data er skjult (**innkapsling**)Metodene utføres ved å kalle på dem: `objekt.metode(parametere)`Vi kan illustrere dette med å snakke oss igjennom ett eksempel. I Python finnes det et listeobjekt som holder data i en liste og metoder på å manipulerer disse listedataene.Først lager vi et listeobjekt bestående av fire favorittland (lister i Python er ordnede):<jupyter_code># oppretter et listeobjekt
mine_favorittland = ['Norge','England','Frankrike','Japan']

# skriver ut datainnholdet i listeobjektet
mine_favorittland<jupyter_output><empty_output><jupyter_text>Deretter kaller vi på listeobjektet sin metode `append` som legger til nye listedata. Vi kan si: *mine_favorittland **sin** (metode) append **med** (parameteret) neste_land_på_lista*.<jupyter_code># oppretter en tekststreng
neste_land_på_lista = 'Danmark'

# legger til tekststrengen (Danmark) til mine_favorittland
mine_favorittland.append(neste_land_på_lista)
mine_favorittland<jupyter_output><empty_output><jupyter_text>Standardbiblioteket og andre bibliotekerI Python finnes det noen innebygde objekter og funksjoner, som f.eks. listeobjekter og print(). Disse ligger i [Pythons standardbiblioteket](https://docs.python.org/3/library/index.html). Andre objekter og funksjoner må hentes inn fra spesifikke biblioteker, som f.eks python biblioteket [pandas](https://pandas.pydata.org/). PySpark har egne biblioteker (se https://spark.apache.org/docs/latest/api/python/index.html). Slike eksterne biblioteker importeres inn ved behov: `import [objekt|funksjon]`  Innebygde objekter og funksjoner i python og pysparkI Pythons standardbibliotek beskrives hvilke *[functions](https://docs.python.org/3/library/functions.html)*, *[types](https://docs.python.org/3/library/stdtypes.html)*, *[constants](https://docs.python.org/3/library/constants.html)* og *[exceptions](https://docs.python.org/3/library/exceptions.html)* som er innebygd.I eksempelet under vises bruk av innbygde:* funksjoner: `input()`, `print()` og `len()`* konstander: `True`* typer: `==`, `+`* *exceptions*: `ValueError`<jupyter_code>fornavn = input("Fornavn: ")
etternavn = input("Etternavn: ")

i=0
while True:
    try:
        alder = int(input("Alder: "))
        break
    except ValueError:
        if (i==0):
            print("Ojsann, det ble feil! Du må skrive din alder i heltall. Prøv igjen ...")
        else: print("nei og nei, det ble feil igjen. Prøv igjen å skriv alder som tall")
    i=i+1
print("Hei, "+fornavn+" "+etternavn)
print (alder)
format(fornavn)
len(fornavn)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10129997547216091, 'fraction_numerical': 0.00564140299239637, 'mean_word_length': 5.842281879194631, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 17, 'https://': 9, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '601782', 'license': 'CC0-1.0', 'n_tokens_mistral': 1449, 'n_tokens_neox': 1411, 'n_words': 407, 'path': 'notebooks/Introduksjon til Dapla, JupyterLab og GitHub/Kort om PySpark og Python.ipynb', 'repo_name': 'mariuslars/kurs-ssb-dapla-veileder', 'size': '4094'}