Укладка паркетной доски на стяжку


Технология укладки паркета на стяжку

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

Финишные отделочные материалы из дерева по-прежнему остаются одними из износостойких и долговечных.

Каким способом монтировать паркет на стяжку

Укладка паркета на бетонную стяжку проводится в несколько этапов. Но для начала разберемся с понятиями «паркет» и «паркетная доска», так как многие обыватели подразумевают под этими терминами одно и то же. Однако это абсолютно разные материалы.

Паркет – это строганные до идеальной гладкости планки из массива, то есть цельные элементы небольших размеров. Длина – 15-90 см, ширина – 3-12 см, толщина – 1,5-2,5 см. Монтаж производится несколькими способами: на клей, метизы (саморезы, гвозди, шпильки), специальные скобы или при помощи пластикового шнура, протянутого в теле планок (натяжной паркет).

А вот паркетная доска – это многослойное покрытие из нескольких сегментов. Верхний слой – это шпон ценного дерева до 6 мм, покрытый лаком или масляно-восковыми составами. Декоративная часть приклеена к плите из срощенных волокон хвойных породе. Нижняя часть представляет собой стабилизирующий слой из тонкоструганной древесины. Габариты: длина до 2,2 м, ширина – до 25 см, толщина – до 14 мм.

Выпускается с замковой системой соединения Click шести видов, но может приклеиваться к основанию либо прикручиваться саморезами. Обработки поверхности (циклевка, шлифовка, грунтование, нанесение защитного слоя лака, масла или воска) не требует. Фактически после сборки это готовое к эксплуатации покрытие. Цена квадратного метра паркетной доски ниже, чем стоимость массивного паркета.

Есть разница и в монтаже покрытий. Например, укладка паркета на стяжку осуществляется только при помощи скоб либо натяжным способом. Связано это с тем, что на бетон паркет клеить или прибивать нельзя – слишком большая разница в степени термического расширения. Финишное покрытие просто вздуется, поэтому рекомендуется предварительно застелить бетон листовым материалом из древесины – фанера, ДСП, ОСП и т.п.

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

Клей для паркетной доски на стяжку лучше использовать дисперсионный или полиуретановый.

Инструменты

Для монтажа паркета на стяжку потребуются следующие инструменты:

  1. Пила с мелкими зубьями или электролобзик с полотнами по дереву.
  2. Молоток (желательно специальный, паркетный).
  3. Нож строительный.
  4. Дрель, шуруповерт.
  5. Угольник, строительный карандаш рулетка, шнур.
  6. Гидроуровень.
  7. Ограничительные клинья и подбивочный брусок или клинышек длиной около 30 см.
  8. Шпатель из нержавеющей стали,
  9. Циклевочная или паркетношлифовальная машина, строительный пылесос, плоско- и углошлифовальн аппарат.

Помимо этого потребуются:

  1. Гидроизоляционная пленка.
  2. Шпатлевка по дереву тонированная либо жидкость для приготовления шпатлевочного состава на основе мелкостружечных опилок.
  3. Грунтовка адгезионная для дерева и пропитка глубокого проникновения для бетона.
  4. Лакокрасочные материалы для финишной обработки паркета.

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

Поэтапная технология монтажа

Монтаж паркетного пола бесклеевым способом проводится в 4 этапа.

1 этап. Подготовка основания

Поверхность бетонной плиты практически никогда не соответствует основному требованию – идеально ровное, сухое, твердое основание. Для ее выравнивания используются несколько методов:

  1. Стяжка цементно-песчаным раствором. Прекрасно нивелирует все перепады, повреждения и дефекты плиты, но после нанесения требуется технологический перерыв – не менее 28 суток. После этого рекомендуется снять верхний слой – слабое цементное молочко, – скребком или барабанной шлифмашиной. После окончания работ основание грунтуется укрепляющим составом. Допустимая влажность основания – не более 6%. Если планируется монтаж системы «теплый пол» или просто утепление, то все работы проводятся именно на этом этапе.
  2. Нивелирующие смеси: черновой наливной пол или ровнитель на гипсовой либо цементно-гипсовой основе. Это промышленные сухие смеси, требующие только разведения водой и нанесения слоем не более 1-5 см. Срок сушки – 1-2 недели в зависимости от состава. Влажность – до 1,5%.
  3. Пескоструйная или дробеструйная обработка и вышлифовка при помощи соответствующих агрегатов. Это быстрый способ выравнивания, но перед началом работ все трещинки и раковины нужно закрыть эпоксидной быстросохнущей шпатлевкой или заполнить цементно-песчаным раствором.

На поверхности не должно быть пятен масла, лакокрасочных покрытий, мусора. Все лишнее счищается, поверхность обеспыливается и грунтуется укрепляющим составом. Допустимый перепад – не более 1 мм на каждый квадратный метр основания.

2 этап. Гидроизоляция и установка ограничителей по периметру

На подготовленное должным образом основание настилается гидроизоляционная пленка. Полосы укладываются с нахлестом 15-20 см, края скрепляются скотчем. Под паркет нельзя укладывать подложки, используемые под ламинат или паркетную доску.

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

3 этап. Монтаж паркета

Собственно укладка паркета на стяжку требует соблюдения определенных условий: температура должна быть комнатной, в пределах от +18°С до 25°С, влажность в помещении около 45-60%.

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

Если основание подготовлено по всем правилам, то сама укладка сложности не представляет. По аналогии с обычной напольной доской, паркет настилается вдоль потоков света, то есть торцевой стороной к окну.

При монтаже на стальные скобы (Junckers, Nexus) порядок действий такой: к обратной стороне каждой планки (за исключением ламелей для последнего ряда) вбиваются крепежные элементы таким образом, чтобы половина длины скобы оставалась свободной. Расстояние между соседними скобами должно быть 15-40 см.

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

Натяжной паркет монтируется несколько иначе. В каждой планке на одинаковом расстоянии просверливаются отверстия небольшого диаметра (менее 1 см). На основании планки собираются в центральный ряд, от которого пойдет все остальное полотно. Каждый шип плитки вставляется в паз предыдущей со смещением на 1/4 или ½ длины, то есть отверстия в теле паркетин должны совпадать. Выступающие части срезаются.

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

Далее с одной стороны на край струны надевается фиксирующая стальная заглушка со шляпкой и утапливается в монтажное отверстие. Зажимным механизмом другой конец шнура натягивается, фиксируется такой же заглушкой.

4 этап. Циклевка и шлифование паркетного пола

После окончания монтажных работ производится грубая шлифовка паркета паркетношлифовальной машиной с насадкой-барабаном зернистостью 40-60 единиц. Предварительно мелкие дефекты, сколы закрываются шпатлевочным составом. Затем производится более тонкая доработка плоскошлифовальной и углошлифовальной машинками зернистостью от 120 единиц и выше.

После окончания шлифовальных работ наносится грунтовочный состав и защитное покрытие. У стен зазоры закрываются плинтусами.

Как защитить паркет от влаги на стяжке

По технологии укладки паркета на стяжку ее влажность по стандартам должна быть в пределах 6-12%. Но лучше перестраховаться и приступать к собственно монтажу лишь тогда, когда влажность стяжки уменьшится до 4%.

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

Стоит запастись терпением и дождаться окончания технологического перерыва. И только после этого застелить пол гидроизоляционной, а не пароизоляционной пленкой с проклеиванием стыков.

Что делать, если лопнул паркет

К сожалению, треснувшие планки качественной реставрации не подлежат. В идеале их нужно заменить сразу же после возникновения дефекта. Но не всегда есть такая возможность, поэтому в качестве временной меры можно использовать шпатлевку готовую или силиконовый тонированный герметик. Работать нужно аккуратно, обработанный участок нельзя нагружать в течение 2-3 суток для полного высыхания.

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

Укладка паркета Изображения, фотографии и векторные изображения

В настоящее время вы используете старую версию браузера, и ваш опыт работы может быть не оптимальным. Пожалуйста, подумайте об обновлении. Учить больше. ImagesImages homeCurated collectionsPhotosVectorsOffset ImagesCategoriesAbstractAnimals / WildlifeThe ArtsBackgrounds / TexturesBeauty / FashionBuildings / LandmarksBusiness / FinanceCelebritiesEditorialEducationFood и DrinkHealthcare / MedicalHolidaysIllustrations / Clip-ArtIndustrialInteriorsMiscellaneousNatureObjectsParks / OutdoorPeopleReligionScienceSigns / SymbolsSports / RecreationTechnologyTransportationVectorsVintageAll categoriesFootageFootage homeCurated collectionsShutterstock SelectShutterstock ElementsCategoriesAnimals / WildlifeBuildings / LandmarksBackgrounds / TexturesBusiness / FinanceEducationFood и DrinkHealth CareHolidaysObjectsIndustrialArtNaturePeopleReligionScienceTechnologySigns / SymbolsSports / RecreationTransportationEditorialAll categoriesEditorialEditorial главнаяРазвлеченияНовостиРоялтиСпортМузыкаМузыка домойПремиумBeatИнструментыShutterstock EditorМобильные приложенияПлагиныИзменение размера изображенияКонвертер файловСоздатель коллажейЦветовые схемыБлог Главная страница блогаДизайнВидеоКонтроллерНовости
Premium ing

Войти

Зарегистрироваться

Меню

ФильтрыОчистить всеВсе изображения
  • Все изображения
  • Фото
  • Векторы
  • Иллюстрации
  • Редакция
  • Кадры
  • Музыка

  • Поиск по изображению

укладка паркета

Сортировать по

Самые актуальные

Свежее содержание

Тип изображения

Все изображения

Фото

Векторы

Иллюстрации

Ориентация

Все ориентации

Горизонтально

Вертикально

Цвет .

python - Как прочитать паркет в PySpark, написанный из Spark?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технолог
.

новых вопросов о паркете - Stack overflow на русском

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
.

Краткое введение в PySpark. PySpark - отличный язык для… | Бен Вебер

Источник: Викимедиа (Венский технический музей)

Учебник по PySpark для науки о данных

PySpark - отличный язык для выполнения масштабного исследовательского анализа данных, построения конвейеров машинного обучения и создания ETL для платформы данных. Если вы уже знакомы с Python и такими библиотеками, как Pandas, тогда PySpark - отличный язык для изучения, чтобы создавать более масштабируемые анализы и конвейеры.Цель этого поста - показать, как приступить к работе с PySpark и выполнять общие задачи.

Мы будем использовать Databricks для среды Spark и набор данных NHL от Kaggle в качестве источника данных для анализа. В этом посте показано, как читать и записывать данные в фреймы данных Spark, создавать преобразования и агрегаты этих фреймов, визуализировать результаты и выполнять линейную регрессию. Я также покажу, как масштабируемо смешивать обычный код Python с PySpark с помощью пользовательских функций Pandas. Чтобы упростить задачу, мы сосредоточимся на пакетной обработке и избежим некоторых сложностей, которые возникают при конвейерах потоковой передачи данных.

Полный блокнот для этого поста доступен на github.

Среда

Существует несколько различных вариантов запуска и работы с Spark:

  • Самостоятельный хостинг: Вы можете настроить кластер самостоятельно, используя голые машины или виртуальные машины. Apache Ambari - полезный проект для этого варианта, но я не рекомендую его для быстрого начала работы.
  • Облачные провайдеры: Большинство облачных провайдеров предлагают кластеры Spark: AWS имеет EMR, а GCP имеет DataProc.Раньше я писал о DataProc в блоге, и вы можете получить интерактивную среду быстрее, чем самостоятельный хостинг.
  • Решения для поставщиков: Компании, включая Databricks и Cloudera, предоставляют решения Spark, что упрощает запуск и запуск Spark.

Используемое решение зависит от безопасности, стоимости и существующей инфраструктуры. Если вы пытаетесь приступить к работе со средой для обучения, я бы предложил использовать Databricks Community Edition.

Создание кластера PySpark в Databricks Community Edition.

В этой среде легко приступить к работе с кластером Spark и средой ноутбука. Для этого руководства я создал кластер со средой выполнения Spark 2.4 и Python 3. Для запуска кода, приведенного в этом посте, вам понадобится по крайней мере Spark версии 2.3 для функциональности Pandas UDF.

Spark Dataframes

Ключевым типом данных, используемым в PySpark, является фрейм данных Spark. Этот объект можно рассматривать как таблицу, распределенную по кластеру, и ее функциональность аналогична фреймам данных в R и Pandas.Если вы хотите выполнять распределенные вычисления с использованием PySpark, вам необходимо выполнять операции с фреймами данных Spark, а не с другими типами данных Python.

Также можно использовать фреймы данных Pandas при использовании Spark, вызвав toPandas () для фрейма данных Spark, который возвращает объект pandas. Однако этой функции обычно следует избегать, за исключением работы с небольшими фреймами данных, поскольку она вытягивает весь объект в память на одном узле.

Одно из ключевых различий между фреймами данных Pandas и Spark - нетерпеливое и отложенное выполнение.В PySpark операции откладываются до тех пор, пока результат не понадобится в конвейере. Например, вы можете указать операции для загрузки набора данных из S3 и применения ряда преобразований к фрейму данных, но эти операции не будут применяться немедленно. Вместо этого записывается граф преобразований, и как только данные действительно необходимы, например, при записи результатов обратно в S3, преобразования применяются как единая конвейерная операция. Этот подход используется, чтобы избежать втягивания полного фрейма данных в память и обеспечивает более эффективную обработку в кластере машин.С фреймами данных Pandas все загружается в память, и каждая операция Pandas применяется немедленно.

Как правило, рекомендуется избегать активных операций в Spark, если это возможно, поскольку это ограничивает объем вашего конвейера, который может быть эффективно распределен.

Чтение данных

Одним из первых шагов, которые необходимо изучить при работе со Spark, является загрузка набора данных в фрейм данных. После загрузки данных в фрейм данных вы можете применять преобразования, выполнять анализ и моделирование, создавать визуализации и сохранять результаты.В Python вы можете загружать файлы непосредственно из локальной файловой системы с помощью Pandas:

 import pandas as pd 
pd.read_csv ("dataset.csv")

В PySpark загрузка файла CSV немного сложнее. В распределенной среде нет локального хранилища, и поэтому для указания пути к файлу необходимо использовать распределенную файловую систему, такую ​​как HDFS, файловое хранилище Databricks (DBFS) или S3.

Обычно при использовании PySpark я работаю с данными в S3. Многие базы данных обеспечивают функцию выгрузки в S3, а также можно использовать консоль AWS для перемещения файлов с локального компьютера на S3.В этой публикации я буду использовать файловую систему Databricks (DBFS), которая предоставляет пути в виде / FileStore . Первый шаг - загрузить CSV-файл, который вы хотите обработать.

Загрузка файла в хранилище файлов Databricks.

Следующим шагом является чтение файла CSV в фрейм данных Spark, как показано ниже. Этот фрагмент кода указывает путь к CSV-файлу и передает ряд аргументов функции read для обработки файла. Последний шаг отображает подмножество загруженного фрейма данных, подобное df.head () в пандах.

 file_location = "/FileStore/tables/game_skater_stats.csv"df = spark.read.format (" csv "). Option (" inferSchema ", 
True) .option (" header ", True) .load (file_location) display (df)

Я предпочитаю использовать формат parquet при работе со Spark, потому что это формат файла, который включает метаданные о типах данных столбца, предлагает сжатие файлов и является форматом файла, который разработан для хорошей работы со Spark. AVRO - еще один формат, который хорошо работает со Spark.В приведенном ниже фрагменте показано, как взять фрейм данных из предыдущего фрагмента и сохранить его как файл parquet в DBFS, а затем повторно загрузить фрейм данных из сохраненного файла parquet.

 df.write.save ('/ FileStore / parquet / game_skater_stats', 
format = 'parquet') df = spark.read.load ("/ FileStore / parquet / game_skater_stats")
display (df)

Результат этого шага такая же, но последовательность выполнения существенно отличается. При чтении файлов CSV в фреймы данных Spark выполняет операцию в режиме ожидания, что означает, что все данные загружаются в память до того, как начнется выполнение следующего шага, в то время как при чтении файлов в паркетном формате используется ленивый подход.Как правило, при работе со Spark нужно избегать нетерпеливых операций, и если мне нужно обработать большие файлы CSV, я сначала преобразую набор данных в формат паркета, прежде чем выполнять остальную часть конвейера.

Часто вам нужно обработать большое количество файлов, например, сотни паркетных файлов, расположенных по определенному пути или каталогу в DBFS. С помощью Spark вы можете включить подстановочный знак в путь для обработки коллекции файлов. Например, вы можете загрузить пакет файлов паркета из S3 следующим образом:

 df = spark.читать .load ("s3a: //my_bucket/game_skater_stats/*.parquet") 

Этот подход полезен, если у вас есть отдельный файл паркета в день или если в вашем конвейере есть предыдущий шаг, который выводит сотни файлов паркета .

Если вы хотите читать данные из базы данных, такой как Redshift, рекомендуется сначала выгрузить данные в S3, а затем обрабатывать их с помощью Spark. В Redshift команду unload можно использовать для экспорта данных в S3 для обработки:

 unload ('select * from data_to_process') 
to 's3: // my_bucket / game_data'
iam_role 'arn: aws: iam :: 123 : роль / RedshiftExport ';

Существуют также библиотеки для баз данных, такие как искровое красное смещение, которые упрощают выполнение этого процесса.

Запись данных

Подобно чтению данных с помощью Spark, при использовании PySpark не рекомендуется записывать данные в локальное хранилище. Вместо этого вам следует использовать распределенную файловую систему, такую ​​как S3 или HDFS. Если вы собираетесь обрабатывать результаты с помощью Spark, то паркет - хороший формат для сохранения фреймов данных. В приведенном ниже фрагменте показано, как сохранить фрейм данных в DBFS и S3 как паркет.

  # DBFS (Паркет) 
df.write.save ('/ FileStore / parquet / game_stats', format = 'parquet') # S3 (Паркет)
df.write.parquet ("s3a: // my_bucket / game_stats", mode = "overwrite")

При сохранении фрейма данных в формате паркета он часто разбивается на несколько файлов, как показано на изображении ниже.

Файлы паркета, созданные при сохранении фрейма данных в DBFS.

Если вам нужны результаты в файле CSV, потребуется немного другой шаг вывода. Одно из основных отличий этого подхода заключается в том, что все данные будут отправлены в один узел перед выводом в CSV. Этот подход рекомендуется, когда вам нужно сохранить небольшой фрейм данных и обработать его в системе за пределами Spark.В приведенном ниже фрагменте показано, как сохранить фрейм данных в виде отдельного файла CSV в DBFS и S3.

  # DBFS (CSV) 
df.write.save ('/ FileStore / parquet / game_stats.csv', format = 'csv') # S3 (CSV)
df.coalesce (1) .write. format ("com.databricks.spark.csv")
.option ("header", "true") .save ("s3a: //my_bucket/game_sstats.csv")

Другой распространенный вывод для сценариев Spark - это NoSQL база данных, такая как Cassandra, DynamoDB или Couchbase. Это выходит за рамки данной публикации, но один подход, который я видел в прошлом, - это запись фрейма данных в S3, а затем запуск процесса загрузки, который сообщает системе NoSQL загрузить данные по указанному пути на S3.

Я также пропустил запись в источник потокового вывода, например Kafka или Kinesis. Эти системы удобнее использовать при использовании Spark Streaming.

Преобразование данных

С фреймами данных Spark можно выполнять множество различных типов операций, во многом схожих с широким спектром операций, которые можно применить к фреймам данных Pandas. Один из способов выполнения операций с фреймами данных Spark - с помощью Spark SQL, который позволяет запрашивать фреймы данных, как если бы они были таблицами.В приведенном ниже фрагменте показано, как найти лучших игроков в наборе данных.

 df.createOrReplaceTempView ("статистика") display (spark.sql ("" "
выберите player_id, sum (1) как игры, сумму (цели) как голы)
из статистики
сгруппируйте по 1
по убыванию по 3 пределу
5
"" "))

Результатом является список идентификаторов игроков, количество появлений в играх и общее количество голов, забитых в этих играх. Если мы хотим отображать имена игроков, нам нужно будет загрузить дополнительный файл, сделать его доступным как временное представление, а затем присоединиться к нему с помощью Spark SQL.

Игроки, набравшие наибольшее количество очков в наборе данных.

В приведенном выше фрагменте я использовал команду display для вывода образца набора данных, но также можно назначить результаты другому фрейму данных, который можно использовать на более поздних этапах конвейера. В приведенном ниже коде показано, как выполнить эти шаги, где первые результаты запроса назначаются новому фрейму данных, который затем назначается временному представлению и объединяется с коллекцией имен игроков.

 top_players = spark.sql ("" "
выберите player_id, sum (1) как игры, сумму (голы) как голы
из статистики
сгруппируйте по 1,
по порядку по 3 desc
limit 5
" "") top_players.createOrReplaceTempView ("top_players")
names.createOrReplaceTempView ("names") display (spark.sql ("" "
выберите p.player_id, goal, _c1 as First, _c2 as Last
from top_players p
присоединяются имена n
на p .player_id = n._c0
порядок 2 desc
"" "))

Результат этого процесса, показанный ниже, определяет Алекса Овечкина как самого результативного игрока в НХЛ на основе набора данных Kaggle.

Выходные данные процесса объединения фреймов данных с помощью Spark SQL.

Существуют операции фрейма данных Spark для общих задач, таких как добавление новых столбцов, удаление столбцов, выполнение объединений, а также вычисление совокупной и аналитической статистики, но при начале работы может быть проще выполнить эти операции с помощью Spark SQL.Кроме того, проще переносить код с Python на PySpark, если вы уже используете такие библиотеки, как PandaSQL или framequery, для управления фреймами данных Pandas с помощью SQL.

Как и большинство операций с фреймами данных Spark, операции Spark SQL выполняются в режиме отложенного выполнения, что означает, что шаги SQL не будут оцениваться до тех пор, пока не потребуется результат. Spark SQL предоставляет отличный способ покопаться в PySpark без предварительного изучения новой библиотеки для фреймов данных.

Если вы используете Databricks, вы также можете создавать визуализации прямо в записной книжке, без явного использования библиотек визуализации.Например, мы можем построить среднее количество голов за игру, используя приведенный ниже код Spark SQL.

 display (spark.sql ("" "
select cast (substring (game_id, 1, 4) || '-'
|| substring (game_id, 5, 2) || '-01' as Date) как месяц)
, сумма (голов) / количество (отдельный game_id) как goal_per_goal
из статистики
group by 1
order by 1
"" "))

Первоначальный результат, отображаемый в записной книжке Databricks, представляет собой таблицу результатов, но мы можем используйте функцию построения графика для преобразования вывода в различные визуализации, такие как гистограмма, показанная ниже.Этот подход не поддерживает все визуализации, которые могут понадобиться специалисту по данным, но он значительно упрощает выполнение исследовательского анализа данных в Spark. При необходимости мы можем использовать функцию toPandas () для создания фрейма данных Pandas на узле драйвера, что означает, что любая библиотека построения графиков Python может использоваться для визуализации результатов. Однако этот подход следует использовать только для небольших фреймов данных, поскольку все данные быстро загружаются в память на узле драйвера.

Среднее количество голов за игру в феврале и марте.

Я также посмотрел на среднее количество голов за бросок для игроков, забивших минимум 5 голов.

 display (spark.sql ("" "
выберите cast (голы / выстрелы * 50 как int) /50.0 как Goals_per_shot
, sum (1) как Players
из (
select player_id, sum (выстрелы) как выстрелы, сумма) (голы) как цели
из статистики
сгруппируйте по 1
, имеющим цели> = 5
)
сгруппируйте по 1
по порядку 1
"" "))

Результаты этого преобразования показаны на диаграмме ниже. Большинство игроков, забивших хотя бы 5 голов, совершают броски от 4% до 12% времени.

голов за выстрел для игроков в наборе данных Kaggle.

MLlib

Один из распространенных вариантов использования Python для специалистов по обработке данных - построение прогнозных моделей. Хотя scikit-learn отлично подходит для работы с пандами, он не масштабируется для больших наборов данных в распределенной среде (хотя есть способы распараллелить его со Spark). При построении прогнозных моделей с помощью PySpark и массивных наборов данных предпочтительной библиотекой является MLlib, поскольку она изначально работает с фреймами данных Spark.Не все алгоритмы из scikit-learn доступны в MLlib, но существует множество вариантов, охватывающих многие варианты использования.

Чтобы использовать один из контролируемых алгоритмов в MLib, вам необходимо настроить фрейм данных с вектором функций и меткой в ​​виде скаляра. После подготовки вы можете использовать функцию fit для обучения модели. В приведенном ниже фрагменте показано, как объединить несколько столбцов в фрейме данных в один вектор с функциями , используя VectorAssembler .Мы используем полученный фрейм данных для вызова функции fit и затем генерируем сводную статистику для модели.

  # MLlib импортирует 
из pyspark.ml.feature import VectorAssembler
из pyspark.ml.regression import LinearRegression # Создайте векторное представление для функций
Assembler = VectorAssembler (inputCols = ['shots', 'hits', 'помогает',
'штрафных минут', 'timeOnIce', 'takeaways'], outputCol = "features")
train_df = ассемблер.transform (df) # Подходит для модели линейной регрессии
lr = LinearRegression (featuresCol = 'features', labelCol = 'goal')
lr_model = lr.fit (train_df) # Вывод статистики
trainingSummary = lr_model.summary
print ("Coefficients:" + str (lr_model.coefficients))
print ("RMSE:% f"% trainingSummary.rootMeanSquaredError)
print ("R2:% f"% trainingSummary.r2)

Модель предсказывает, сколько целей игрок будет забивать в зависимости от количества бросков, времени в игре и других факторов.Однако производительность этой модели оставляет желать лучшего, она дает среднеквадратичную ошибку (RMSE) 0,375 и значение R-квадрат 0,125. Коэффициент с наибольшим значением был у столбца снимков , но он не дал достаточно сигнала для точности модели.

При построении конвейера машинного обучения с PySpark необходимо учитывать ряд дополнительных шагов, включая наборы данных для обучения и тестирования, настройку гиперпараметров и хранение моделей. Приведенный выше фрагмент - это просто отправная точка для начала работы с MLlib.

Pandas UDFs

Одной из функций Spark, которую я использовал совсем недавно, являются определяемые пользователем функции (UDF) Pandas, которые позволяют выполнять распределенные вычисления с фреймами данных Pandas в среде Spark. Общий способ работы этих UDF заключается в том, что вы сначала разделяете фрейм данных Spark с помощью оператора groupby , и каждый раздел отправляется на рабочий узел и транслируется в фрейм данных Pandas, который передается в UDF. Затем UDF возвращает преобразованный фрейм данных Pandas, который объединяется со всеми другими разделами, а затем преобразуется обратно в фрейм данных Spark.Конечный результат действительно полезен: вы можете использовать библиотеки Python, которым требуются Pandas, но теперь их можно масштабировать до огромных наборов данных, если у вас есть хороший способ разбить фрейм данных. Пользовательские функции Pandas были представлены в Spark 2.3, и я расскажу о том, как мы используем эту функциональность в Zynga во время Spark Summit 2019.

Подбор кривой

- это обычная задача, которую я выполняю как специалист по данным. В приведенном ниже фрагменте кода показано, как выполнить подгонку кривой для описания взаимосвязи между количеством выстрелов и попаданий, которые игрок записывает в ходе игры.Во фрагменте показано, как мы можем выполнить эту задачу для одного игрока, вызвав toPandas () для набора данных, отфильтрованного для одного игрока. Результатом этого шага являются два параметра (коэффициенты линейной регрессии), которые пытаются описать взаимосвязь между этими переменными.

  # Пример данных для игрока 
sample_pd = spark.sql ("" "
выберите * из статистики
, где player_id = 8471214
" "") .toPandas () # Импортировать библиотеки python
из scipy.optimize import leastsq
import numpy as np # Определить функцию для соответствия
def fit (params, x, y):
return (y - (params [0] + x * params [1])) # Подогнать кривой и покажите результаты
result = leastsq (fit, [1, 0],
args = (sample_pd.shots, sample_pd.hits))
print (result)

Если мы хотим рассчитать эту кривую для каждого игрока и имеют большой набор данных, то вызов toPandas () завершится ошибкой из-за исключения нехватки памяти. Мы можем масштабировать эту операцию для всего набора данных, вызвав groupby () на player_id , а затем применив Pandas UDF, показанный ниже.Функция принимает в качестве входных данных фрейм данных Pandas, который описывает статистику игрового процесса для одного игрока, и возвращает сводный фрейм данных, который включает player_id и подогнанные коэффициенты. Каждый из сводных фреймов данных Pandas затем объединяется в фрейм данных Spark, который отображается в конце фрагмента кода. Еще одна часть настройки для использования Pandas UDF - определение схемы для результирующего фрейма данных, где схема описывает формат фрейма данных Spark, сгенерированного на этапе применения.

  # Загрузить необходимые библиотеки 
из pyspark.sql.functions import pandas_udf, PandasUDFType
из pyspark.sql.types import *
import pandas as pd # Создать схему для полученного фрейма данных
schema = StructType ([ StructField ('ID', LongType (), True),
StructField ('p0', DoubleType (), True),
StructField ('p1', DoubleType (), True)]) # Определите UDF, ввод и выходными данными являются Pandas DFs
@pandas_udf (schema, PandasUDFType.GROUPED_MAP)
def analysis_player (sample_pd): # вернуть пустые параметры в недостаточно данных
if (len (sample_pd.shots) <= 1):
return pd.DataFrame ({'ID': [sample_pd.player_id [0 ]],
'p0': [0], 'p1': [0]})

# Выполнить аппроксимацию кривой
result = leastsq (fit, [1, 0], args = (sample_pd.shots,
sample_pd .hits))

# Вернуть параметры как Pandas DF
return pd.DataFrame ({'ID': [sample_pd.player_id [0]],
'p0': [result [0] [0]], 'p1': [result [0] [1]]}) # выполнить UDF и показать результаты
player_df = df.groupby ('player_id'). apply (analysis_player)
display (player_df)

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

Вывод из Pandas UDF, показывающий соответствие кривой для каждого игрока.

Best Practices

Я рассмотрел некоторые типичные задачи использования PySpark, но также хотел дать несколько советов по упрощению перехода от Python к PySpark.Вот некоторые из лучших практик, которые я собрал на основе моего опыта переноса нескольких проектов между этими средами:

  • Избегайте словарей, используйте фреймы данных: с использованием типов данных Python, таких как словари, означает, что код может быть невыполнимым в распределенный режим. Вместо использования ключей для индексации значений в словаре рассмотрите возможность добавления еще одного столбца в фрейм данных, который можно использовать в качестве фильтра.
  • Используйте toPandas экономно: Вызов toPandas () приведет к загрузке всех данных в память на узле драйвера и предотвратит выполнение операций в распределенном режиме.Эту функцию можно использовать, когда данные уже были агрегированы, и вы хотите использовать знакомые инструменты построения графиков Python, но ее не следует использовать для больших фреймов данных.
  • Избегайте циклов for: Если возможно, желательно переписать логику цикла for, используя шаблон groupby-apply для поддержки выполнения параллельного кода. Я заметил, что использование этого шаблона в Python также привело к очистке кода, который легче перевести в PySpark.
  • Попробуйте минимизировать активные операции: Чтобы ваш конвейер был как можно более масштабируемым, лучше избегать активных операций, которые загружают полные фреймы данных в память.Я заметил, что чтение в CSV - это активная операция, и моя работа заключается в том, чтобы сохранить фрейм данных как паркет, а затем перезагрузить его из паркета для создания более масштабируемых конвейеров.
  • Используйте framequery / pandasql, чтобы упростить перенос: Если вы работаете с чужим кодом Python, может быть сложно понять, чего достигают некоторые операции Pandas. Если вы планируете переносить свой код с Python на PySpark, то использование библиотеки SQL для Pandas может упростить этот перевод.

Я обнаружил, что время, потраченное на написание кода в PySpark, также улучшилось благодаря навыкам программирования на Python.

Заключение

PySpark - отличный язык для изучения специалистами по данным, поскольку он обеспечивает масштабируемый анализ и конвейеры машинного обучения. Если вы уже знакомы с Python и Pandas, то большую часть ваших знаний можно применить к Spark. Я показал, как выполнять некоторые стандартные операции с PySpark для ускорения процесса обучения. Я также продемонстрировал некоторые недавние функции Spark с UDF Pandas, которые позволяют выполнять код Python в распределенном режиме.Существуют отличные среды, которые позволяют легко приступить к работе с кластером Spark, поэтому сейчас отличное время для изучения PySpark!

.

Смотрите также