Létrehozás
DataFrame-et az Spark munkamenet read
adattagjának metódusain keresztül tudunk létrehozni.
CSV
df = spark.read.csv('dolgozo.csv')
Ezzel létrejött a következő dataframe:
DataFrame[_c0: string, _c1: string, _c2: string, _c3: string, _c4: string, _c5: string, _c6: string, _c7: string]
A dataframe tartalmát a show([n])
metódussal tudjuk megjeleníteni.
_c0 | _c1 | _c2 | _c3 | _c4 | _c5 | _c6 | _c7 |
---|---|---|---|---|---|---|---|
DKOD | DNEV | FOGLALKOZAS | FONOKE | BELEPES | FIZETES | JUTALEK | OAZON |
7839 | KING | PRESIDENT | 0000 | 81-NOV-17 | 5000 | 0 | 10 |
Nem feltétlen ezt az eredményt vártuk. Adatként került értelmezésre a fejléc és a típusok sem megfelelőek.
A betöltés előtt az option()
metódus láncolásával tudjuk konfigurálni a fájlolvasást.
df = (spark.read
.option('header', True) # első sor fejléc
.option('inferschema', True) # séma kikövetkeztetése
.csv('dolgozo.csv'))
A df.printSchema()
metódushívással le tudjuk kérne a beolvasott adat sémáját.
root
|-- DKOD: integer (nullable = true)
|-- DNEV: string (nullable = true)
|-- FOGLALKOZAS: string (nullable = true)
|-- FONOKE: integer (nullable = true)
|-- BELEPES: string (nullable = true)
|-- FIZETES: integer (nullable = true)
|-- JUTALEK: integer (nullable = true)
|-- OAZON: integer (nullable = true)
Az pyspark.sql.types
csomag típusaival lehetőségübk van manuálisan felépíteni a sémát.
from pyspark.sql.types import StringType,StructType, StructField, IntegerType
workerSchema = StructType([
StructField(name='DKOD', dataType=IntegerType(), nullable=False), # keyword megadás
StructField('DNEV', StringType()), # pozícionális megadás
StructField('FOGLALKOZAS', StringType()),
StructField('FONOKE', IntegerType()),
StructField('BELEPES', StringType()),
StructField('FIZETES', IntegerType()),
StructField('JUTALEK', IntegerType()),
StructField('OAZON', IntegerType()),
])
CSV fájlok esetén a nullable=False
-nak nincs hatása.
JSON
Lehetőségünk van JSON alapján beolvasni. Mivel a JSON minden rekord esetén tartalmazza a fejlécet ezért azzal sosem kell törődnünk.
d_json = spark.read.option('multiline', True).json('dolgozo.json')
Az alap JSON beolvasási stratégia a JSON Lines formátum. Ez a JSON-nek egy olyan változata, ahol minden rekord egy sor.
{"name":"group_1", "value":5}
{"name":"group_1", "value":6}
{"name":"group_3", "value":7}
{"name":"group_2", "value":3}
A rendes json formátum használatához meg kell adni a multiline
opciót, ahogy azt az előbbi kódrészlet esetén is
láttuk.
Szövegfájl
Lehetőségünk van szövegfájlokat megnyitni. Ekkor a DataFrame egyetlen oszlopból fog állni, minden rekord a szövegfájl adott sorát tárolja el.
Például a következő kód esetén.
df1 = spark.read.text('dolgozo.csv')
df1.show(2)
value |
---|
KOD,DNEV,FOGLALK... |
"7839,""KING"",""PRES..." |
Relációs adatbázis
A dataframe-et akár adatbázisból is előállíthatjuk. Ennek megmutatása nem célja a tárgynak, sőt, mivel adatbázis-kezelő rendszerenként a konfigurálási folyamat eltérhet én sem tudok megfelelő útmutatást adni.