Программирование

PySpark process Multi char Delimiter Dataset

Цель этой статьи - обработать несколько файлов с разделителями, используя Apache Spark с языком программирования Python. Это сценарий в реальном времени, когда приложение может совместно использовать несколько файлов с разделителями, а команда разработчиков должна обрабатывать их. Мы узнаем, как справиться с этой задачей.

Набор входных данных выглядит следующим образом:

Name@@#Age  <--Header
vivek, chaudhary@@#30  <--row1
john, morgan@@#28   <--row2

Подход 1. Давайте попробуем прочитать файл с помощью read.csv () и посмотрим на результат:

from pyspark.sql import SparkSession
from pyspark.sql import SparkSession
spark= SparkSession.builder.appName(‘multiple_delimiter’).getOrCreate()
test_df=spark.read.csv(‘D:\python_coding\pyspark_tutorial\multiple_delimiter.csv’)
test_df.show()

# Примечание. Результат не соответствует желаемому, поэтому обработка не принесет желаемых результатов.

Подход 2. Затем прочтите файл с помощью read.csv () с параметром option () и передайте разделитель в качестве аргумента, имеющего значение ' @@ # ' и посмотрите результат:

test_df=spark.read.option(‘delimiter’,’@@#’).csv(‘D:\python_coding\pyspark_tutorial\multiple_delimiter.csv’)
test_df.show(truncate=0)

# Примечание: искра выдает ошибку, когда мы пытаемся передать разделитель из более чем одного символа.

Подход 3: следующий способ - использовать метод искры read.text ().

mult_df=spark.read.text(‘D:\python_coding\pyspark_tutorial\multiple_delimiter.csv’)
mult_df.show(truncate=0)

# Примечание: spark.read.text возвращает DataFrame.

Каждая строка в текстовом файле представляет собой запись в DataFrame с одним столбцом «значение». Чтобы преобразовать в несколько столбцов, мы будем использовать метод преобразования карты и разделения для преобразования и разделения значений столбца.

#first() returns the first record of dataset
header=mult_df.first()[0]
print(header)
Output: 
Name@@#Age
#split('delimiter') the string on basis of the delimiter
#define the schema of the Dataframe to be created
schema=header.split(‘@@#’)
print(schema)
Output:
['Name', 'Age']

Следующим шагом является разделение строки и создание отдельных столбцов:

#filter operation is removing the header
#map operation is splitting each record as per delimiter
#.rdd converts DF to rdd and toDF converts the rdd back to DF
mult_df.filter(mult_df[‘value’]!=header).rdd.map(lambda x:x[0].split(‘@@#’)).toDF(schema).show()

Ура!! Мы можем разделить данные на основе множественного разделителя ‘@@ #’.

Резюме:

· Чтение набора данных с несколькими разделителями с помощью метода spark.read.text ()

· Использование преобразований map (), filter ()

Спасибо всем за то, что прочитали мой блог, и если вам нравится мой контент и объяснения, подпишитесь на меня в среде и поделитесь своими отзывами, которые всегда помогут всем нам расширить наши знания.