Программирование
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 ()
Спасибо всем за то, что прочитали мой блог, и если вам нравится мой контент и объяснения, подпишитесь на меня в среде и поделитесь своими отзывами, которые всегда помогут всем нам расширить наши знания.