PySpark Odczyt CSV()

Pyspark Odczyt Csv



Konstruowanie PySpark DataFrame z danych CSV jest możliwe w PySpark za pomocą funkcji read.csv(). W niektórych scenariuszach, jeśli chcesz załadować dane zewnętrzne do PySpark DataFrame, PySpark obsługuje wiele formatów, takich jak JSON, CSV itp. W tym samouczku zobaczymy, jak odczytać dane CSV i załadować je do PySpark DataFrame. Omówimy również ładowanie wielu plików CSV w pojedynczej ramce DataFrame naraz wraz z przykładami.

Pyspark.sql.DataFrameReader.csv()

Ta metoda służy do odczytywania danych z plików CSV i przechowywania ich w PySpark DataFrame. Pobiera opcje podczas wczytywania CSV do DataFrame. Omówimy szczegółowo różne opcje z przykładami. Podczas przekazywania więcej niż jednego pliku CSV ważne jest, aby nazwy plików z rozszerzeniem były przekazywane na liście oddzielonej operatorem przecinka. Jeśli czytasz tylko jeden plik CSV, nie ma potrzeby podawania nazwy pliku na liście.

Składnia:







Pojedynczy plik - spark_app.read.csv('file.csv', opcje …)

Wiele plików – spark_app.read.csv(['plik1.csv','plik2.csv',...],opcje...)



Możliwe jest również oddzielenie opcji i nazw plików.



Pojedynczy plik – spark_app.read.options(options…).csv('plik.csv')





Wiele plików – spark_app.read.options(options…).csv(['plik1.csv','plik2.csv',...])

Zainstaluj bibliotekę PySpark przed zaimplementowaniem poniższych przykładów.



pip zainstaluj pyspark

Po udanej instalacji możesz zobaczyć dane wyjściowe w następujący sposób:

Scenariusz 1: Odczytywanie nagłówka pliku CSV

Utwórzmy plik CSV o nazwie „person_skill.csv” z 5 rekordami, który pokazano poniżej i załadujmy go do PySpark DataFrame:

Parametr header służy do określania nazw kolumn w PySpark DataFrame. Przyjmuje wartość logiczną. Jeśli jest to „True”, rzeczywiste nazwy kolumn, które istnieją w pliku CSV, są określone w DataFrame, w przeciwnym razie określone są c0, c1, c2… i rzeczywiste nazwy kolumn będą wierszami. Najlepiej jest ustawić parametr nagłówka na wartość true.

Przykład 1: Nagłówek = Prawda

zaimportuj pyspark

z pyspark.sql zaimportuj SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Wskazówka dotycząca Linuksa” .getOrCreate()

# Załaduj csv o nazwie - person_skill.csv do umiejętności z etykietami kolumn z nagłówkiem

umiejętności = linuxhint_spark_app.read.csv( „person_skill.csv” , nagłówek = Prawda)

# Wyświetl ramkę danych

umiejętności.pokaż()

Wyjście:

Wyjaśnienie:

Widzimy, że PySpark DataFrame jest tworzony z pliku CSV z określonymi kolumnami i wierszami.

Użyj następującego polecenia, aby sprawdzić kolumny:

umiejętności.kolumny

Przykład 2: Nagłówek = Fałsz

zaimportuj pyspark

z pyspark.sql zaimportuj SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Wskazówka dotycząca Linuksa” .getOrCreate()

# Załaduj csv o nazwie - person_skill.csv do umiejętności z etykietami kolumn bez nagłówka

umiejętności = linuxhint_spark_app.read.csv( „person_skill.csv” , nagłówek = Fałsz)

# Wyświetl ramkę danych

umiejętności.pokaż()

Wyjście:

Wyjaśnienie:

Widzimy, że PySpark DataFrame jest tworzony z pliku CSV bez istniejących kolumn.

Ponadto istniejące kolumny są przechowywane jako wiersze w PySpark DataFrame.

umiejętności.kolumny

Korzystanie z funkcji Read.options.csv()

Teraz odczytujemy plik CSV za pomocą metody read.options.csv(). Tutaj musimy przekazać opcje takie jak ogranicznik, nagłówek itp. w opcjach jako argumenty i nazwę pliku w funkcji csv(). Przekażmy parametr nagłówka, ustawiając go na „True”.

Scenariusz 1:

zaimportuj pyspark

z pyspark.sql zaimportuj SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Wskazówka dotycząca Linuksa” .getOrCreate()

# Używanie read.options.csv()

umiejętności = linuxhint_spark_app.read. opcje ( nagłówek =Prawda).csv( „person_skill.csv” )

# Wyświetl ramkę danych

umiejętności.pokaż()

Wyjście:

Scenariusz 2: odczytywanie ogranicznika pliku CSV

Parametr delimiter przyjmuje znak, który jest używany do oddzielania każdego pola. Domyślnie zajmuje to przecinek (,). Użyjmy tego samego pliku CSV, który jest używany w pierwszym scenariuszu i przekażmy przecinek („,”) jako ogranicznik.

zaimportuj pyspark

z pyspark.sql zaimportuj SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Wskazówka dotycząca Linuksa” .getOrCreate()

# Użycie read.options.csv() z ogranicznikiem wraz z nagłówkiem

umiejętności = linuxhint_spark_app.read. opcje ( nagłówek =Prawda, ogranicznik= ',' .csv( „person_skill.csv” )

# Wyświetl ramkę danych

umiejętności.pokaż()

Wyjście:

Czytanie wielu plików

Do tej pory odczytywaliśmy pojedynczy plik CSV. Zobaczmy, jak odczytać więcej niż jeden plik CSV. W tym scenariuszu wiersze w wielu plikach są dołączane do pojedynczej ramki danych PySpark. Musimy tylko przekazać nazwy plików na liście w metodzie.

Przykład:

Miejmy następujące pliki CSV o nazwach „person_skill.csv” i „person_skill2.csv” z następującymi danymi:


Przeczytaj te dwa pliki CSV i zapisz je w jednym PySpark DataFrame.

zaimportuj pyspark

z pyspark.sql zaimportuj SparkSession

linuxhint_spark_app = SparkSession.builder.appName( „Wskazówka dotycząca Linuksa” .getOrCreate()

# Załaduj 2 pliki csv o nazwach - person_skill.csv i person_skill2.csv do umiejętności z etykietami kolumn z nagłówkiem

umiejętności = linuxhint_spark_app.read.csv([ „person_skill.csv” , „person_skill2.csv” ],wrzesień= ',' , nagłówek = Prawda)

umiejętności.pokaż()

Wyjście:

Wyjaśnienie:

Pierwszy CSV zawiera 6 rekordów, a drugi CSV zawiera 3 rekordy. Widzimy, że pierwszy plik CSV jest najpierw ładowany do DataFrame. Następnie ładowany jest drugi plik CSV. Wreszcie PySpark DataFrame zawiera 9 rekordów.

Wniosek

Wczytanie pliku CSV do PySpark DataFrame jest dość proste dzięki metodzie pyspark.sql.DataFrameReader.csv() . Możliwe jest przekazanie parametrów nagłówka i ogranicznika do tej metody w celu określenia kolumn i formatu. PySpark obsługuje również jednoczesne odczytywanie wielu plików CSV za pomocą dostarczonych metod wraz z ich opcjami. W tym artykule widzieliśmy przykłady, rozważając różne opcje. Widzieliśmy również dwa sposoby przekazywania opcji do metody.