Как хранить исторические данные более эффективно
Более эффективное хранение исторических данных
Практическое пособие по использованию PySpark для хранения только 0.01% строк DataFrame без потери какой-либо информации.
В эпоху, когда компании и организации собирают больше данных, чем когда-либо ранее, наборы данных склонны накапливать миллионы ненужных строк, которые не содержат никакой новой или ценной информации. В этой статье мы сосредоточимся на важном аспекте управления данными: удалении строк в наборе данных, если они не предоставляют никакой добавленной ценности, с использованием PySpark*.
*PySpark используется вместо pandas при работе с очень большими наборами данных, потому что он может обрабатывать данные на нескольких компьютерах, что делает его быстрее и масштабируемым. Pandas хорошо работает с меньшими наборами данных, которые могут поместиться в память на одном компьютере, но может становиться медленным или даже непрактичным для больших данных.
Давайте представим следующую ситуацию: вы работаете в качестве инженера/ученого по данным в отделе по обслуживанию недвижимости реальной компании. За последние десять лет ваша компания загружала все данные об обслуживании из внешней базы данных, содержащей состояние ваших зданий, и хранила их в облачном хранилище компании. Данные могут выглядеть например так:
В этом наборе данных присутствуют три столбца:
- Построение рекомендателя для данных с неявной обратной связью
- Принципы управления данными для науки о данных
- Как создать систему рейтинга Elo на основе данных для игр 2 на 2
id
-> для идентификатора здания.condition
-> целое число от 1 (ужасное) до 10 (отличное), которое представляет состояние здания.import_date
-> столбец с датой и временем, представляющий день, когда эта строка была импортирована из внешнего программного обеспечения.
Чтобы создать этот набор данных самостоятельно, выполните следующий код:
from pyspark.sql import SparkSession, Rowfrom pyspark.sql.functions as ffrom pyspark.sql.types import IntegerType, DateTypeimport random# задайте seed, чтобы получить одинаковые результаты при повторном выполненииrandom.seed(42)# создайте сеанс Sparkspark = SparkSession.builder.getOrCreate()# создайте список идентификаторовids = list(range(1, 11)) # Измените размер этого списка, чтобы получить нужное количество уникальных идентификаторов# создайте два возможных состояния для каждого идентификатораconditions = [[random.randint(1, 10) for _ in range(2)] for _ in ids]# создайте список кортежей, где каждый кортеж является строкойrows = [(id, random.choice(conditions[id-1]), date) for id in ids…