Изменение столбцов DataFrame
На предыдущем шаге вы отфильтровали строки, не соответствующие формату имён. Теперь, опираясь на проделанную работу, ваш руководитель просит создать два новых столбца — first_name и last_name. Для этого нужно разбить столбец VOTER_NAME на слова по символу пробела. Последнее слово станет last_name, а все остальные — first_name. В этом упражнении вы познакомитесь с новыми функциями: .split(), .size() и .getItem(). Метод .getItem(index) принимает целочисленный аргумент и возвращает элемент столбца с соответствующим индексом. Функции .split() и .size() находятся в библиотеке pyspark.sql.functions.
Обратите внимание: подобные операции всегда зависят от конкретной задачи. Приведение данных к единому формату, как правило, важнее самих деталей этого формата. Очистка данных редко выполняется для одного человека — стандартизованный формат упрощает дальнейшую работу с данными в команде (например, Павлу не нужно беспокоиться об именах — Мария уже привела набор данных в порядок).
Отфильтрованный DataFrame с данными об избирателях из предыдущего упражнения доступен как voter_df. Библиотека pyspark.sql.functions импортирована под псевдонимом F.
Это упражнение является частью курса
Очистка данных с помощью PySpark
Инструкции к упражнению
- Добавьте новый столбец
splits, содержащий список возможных частей имени. - Используйте метод
getItem()и создайте новый столбецfirst_name. - Получите последний элемент списка
splitsи создайте столбецlast_name. - Удалите столбец
splitsи выведите обновлённыйvoter_df.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Add a new column called splits separated on whitespace
voter_df = voter_df.withColumn(____, F.____(voter_df.VOTER_NAME, '\s+'))
# Create a new column called first_name based on the first item in splits
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(____)
# Get the last entry of the splits list and create a column called last_name
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(F.____('splits') - ____))
# Drop the splits column
voter_df = voter_df.____('splits')
# Show the voter_df DataFrame
voter_df.show()