PySpark читает и записывает файлы Parquet в DataFrame.
PySpark читает и записывает файлы Parquet в DataFrame.

В этой статье Юн Дуоджун научится вместе с вами писать файлы Parquet из PySpark DataFrame, считывать файлы Parquet в DataFrame и создавать представления/таблицы для выполнения SQL-запросов. Также узнайте, как секционировать данные из файлов Parquet и получать секции с помощью SQL для повышения производительности.

Pyspark SQL при условии, что Parquet Чтение файлов DataFrame Казусё DataFrame писать Parquet документ,DataFrameReaderиDataFrameWriterПравильный методparquet()соответственно для чтенияиписать/создавать Parquet документ. Паркет Файл сохраняет схему вместе с данными, поэтому он используется для обработки структурированных файлов.

Вот как PySpark Читать в написании Parquet Простое описание файла, которое я подробно объясню в следующем разделе.

Язык кода:javascript
копировать
df.write.parquet("/tmp/out/people.parquet") 
parDF1=spark.read.parquet("/temp/out/people.parquet")

Я подробно объяснил это раньше. такое файл паркета и ее родственник CSV、JSON и другие преимущества форматов текстовых файлов.

Что такое файл паркета

Apache Parquet файл представляет собой столбчатый формат хранения, подходящий для Hadoop Любой проект в экосистеме, независимо от выбранной платформы обработки данных, модели данных или языка программирования.

https://parquet.apache.org/

преимущество

При запросе к колоночному хранилищу ненужные данные очень быстро пропускаются, что приводит к более быстрому выполнению запроса. Таким образом, агрегированные запросы требуют меньше времени по сравнению с базами данных, ориентированными на строки.

Parquet поддерживает расширенные вложенные структуры данных и поддерживает эффективные параметры сжатия и схемы кодирования.

Pyspark SQL Поддержите чтение написать Parquet файл автоматически фиксирует схему необработанных данных, а также снижает среднее значение 75% хранения данных. Писпарк Поддерживается по умолчанию в своей библиотеке Parquet, поэтому нам не нужно добавлять какие-либо зависимые библиотеки.

Пример Apache Parquet Pyspark

так как у нас нет Parquet файл, с которого мы начинаем DataFrame писать Паркет. Во-первых, как использовать spark.createDataFrame() Создать из списка данных Pyspark DataFrame。

Язык кода:javascript
копировать
data =[("James ","","Smith","36636","M",3000),
       ("Michael ","Rose","","40288","M",4000),
       ("Robert ","","Williams","42114","M",4000),
       ("Maria ","Anne","Jones","39192","F",4000),
       ("Jen","Mary","Brown","","F",-1)]
columns=["firstname", "middlename",
         "lastname", "dob",
         "gender", "salary"]
df=spark.createDataFrame(data,columns)

В приведенном выше примере создается DataFrame, содержащий firstname、middlename、lastname、dob、gender、salary Список.

Pyspark записывает DataFrame в формат файла Parquet

сейчассуществовать ПозвонивDataFrameWriterдобрыйизparquet()функция отPySpark DataFrameсоздавать паркетный документ. Когда ВоляDataFrame пишет паркетный документ, он автоматически сохраняет имена столбцов и их типы данных. Pysparkсоздаватькаждый раздел имеет документ .parquet Расширение файла.

Язык кода:javascript
копировать
df.write.parquet("/PyDataStudio/output/people.parquet")

Pyspark считывает файл Parquet в DataFrame

Pyspark существовать DataFrameReader добрыйсерединапоставлятьполучил одинparquet()метод Воля Parquet Чтение файлов кадр данных. Ниже представлено завещание Parquet Файл, прочитанный в dataframe пример.

Язык кода:javascript
копировать
parDF=spark.read.parquet("/PyDataStudio/output/people.parquet")

Добавить или перезаписать существующие файлы Parquet

использовать append Режим сохранения «Добавить» позволяет добавить фрейм данных к существующему. Parquet документсередина.Чтобы перезаписатьиспользовать overwrite Перезаписать режим сохранения.

Язык кода:javascript
копировать
df.write.mode('append') \
        .parquet("/PyDataStudio/output/people.parquet")
df.write.mode('overwrite') \
        .parquet("/PyDataStudio/output/people.parquet")

Выполнить SQL-запрос DataFrame

Pyspark Sql поставлятьсуществовать Parquet Создайте временное представление файла для выполнения. sql Запрос。существоватьтыиз Хранение программсуществовать До,Эти представления доступны.

Язык кода:javascript
копировать
parqDF.createOrReplaceTempView("ParquetTable")
parkSQL = spark.sql("select * from ParquetTable where salary >= 4000 ")

Создать таблицу в файле Parquet

сейчассуществовать Приходите и посмотритесуществовать Parquet Выполнить в файле SQL Запрос. чтобы выполнить sql Запросы, мы не следуем DataFrame серединасоздавать,Но прямосуществовать parquet Создайте временное представление или таблицу в файле.

Язык кода:javascript
копировать
spark.sql("CREATE TEMPORARY VIEW PERSON USING parquet OPTIONS (path \"/PyDataStudio/output/people.parquet\")")
spark.sql("SELECT * FROM PERSON").show()

существоватьздесь мы начнем с people.parquet файл создает временное представление PERSON . Это дает следующие результаты.

Язык кода:javascript
копировать
+---------+----------+--------+-----+------+------+
|firstname|middlename|lastname|  dob|gender|salary|
+---------+----------+--------+-----+------+------+
|  Robert |          |Williams|42114|     M|  4000|
|   Maria |      Anne|   Jones|39192|     F|  4000|
| Michael |      Rose|        |40288|     M|  4000|
|   James |          |   Smith|36636|     M|  3000|
|      Jen|      Mary|   Brown|     |     F|    -1|
+---------+----------+--------+-----+------+------+

Создать файл раздела Parquet

когда мы PERSON Когда таблица изучает конкретный Запрос, она сканирует все строки и возвращает результаты. Это похоже на традиционные изданные библиотеки Запрососуществлять. существовать PySpark , мы можем использоватьиспользовать PySpark partitionBy()пара методовданныераздел,Улучшите Запрососуществлять оптимизированным способом.

Язык кода:javascript
копировать
df.write.partitionBy("gender","salary") \
     .mode("overwrite") \
        .parquet("/PyDataStudio/output/people2.parquet")

при проверке people2.parquet файл, он имеет два раздела gender и salary

Получить из разделенного файла Parquet

В следующем примере объясняется разделение Parquet Файл, прочитанный в gender=M из DataFrame середина.

Язык кода:javascript
копировать
parDF2=spark.read.parquet("/PyDataStudio/output/people2.parquet/gender=M")
parDF2.show(truncate=False)

Вышеупомянутый результат Примера показан ниже.

Язык кода:javascript
копировать
+---------+----------+--------+-----+------+
|firstname|middlename|lastname|dob  |salary|
+---------+----------+--------+-----+------+
|Robert   |          |Williams|42114|4000  |
|Michael  |Rose      |        |40288|4000  |
|James    |          |Smith   |36636|3000  |
+---------+----------+--------+-----+------+

Создайте таблицу в секционированном файле Parquet.

существоватьздесь,Усуществовать зону паркетной доски начальствосоздавать этот стол,И быстрее изучить один, чем никакой раздел из таблицы, изучить из Запрос,Это улучшает производительность.

Язык кода:javascript
копировать
spark.sql("CREATE TEMPORARY VIEW PERSON2 USING parquet OPTIONS (path \"/PyDataStudio/output/people2.parquet/gender=F\")")
spark.sql("SELECT * FROM PERSON2" ).show()

Вышеупомянутый результат Примера показан ниже.

Язык кода:javascript
копировать
+---------+----------+--------+-----+------+
|firstname|middlename|lastname|  dob|salary|
+---------+----------+--------+-----+------+
|   Maria |      Anne|   Jones|39192|  4000|
|      Jen|      Mary|   Brown|     |    -1|
+---------+----------+--------+-----+------+

Полный пример чтения и записи файлов Parquet с помощью PySpark.

Язык кода:javascript
копировать
import pyspark
from pyspark.sql import SparkSession
spark=SparkSession.builder.appName("parquetFile").getOrCreate()
data =[("James ","","Smith","36636","M",3000),
              ("Michael ","Rose","","40288","M",4000),
              ("Robert ","","Williams","42114","M",4000),
              ("Maria ","Anne","Jones","39192","F",4000),
              ("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
df.write.mode("overwrite").parquet("/PyDataStudio/output/people.parquet")
parDF1=spark.read.parquet("/PyDataStudio/output/people.parquet")
parDF1.createOrReplaceTempView("parquetTable")
parDF1.printSchema()
parDF1.show(truncate=False)

parkSQL = spark.sql("select * from ParquetTable where salary >= 4000 ")
parkSQL.show(truncate=False)

spark.sql("CREATE TEMPORARY VIEW PERSON USING parquet OPTIONS (path \"/PyDataStudio/output/people.parquet\")")
spark.sql("SELECT * FROM PERSON").show()

df.write.partitionBy("gender","salary").mode("overwrite").parquet("/PyDataStudio/output/people2.parquet")

parDF2=spark.read.parquet("/PyDataStudio/output/people2.parquet/gender=M")
parDF2.show(truncate=False)

spark.sql("CREATE TEMPORARY VIEW PERSON2 USING parquet OPTIONS (path \"/PyDataStudio/output/people2.parquet/gender=F\")")
spark.sql("SELECT * FROM PERSON2" ).show()
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose