PySpark — это мощная платформа с открытым исходным кодом для обработки больших данных, которая предоставляет API Python для Apache Spark. Одна из ключевых функций, которую он предлагает, — это возможность разбирать массивы, что позволяет нам разбить один столбец, содержащий массив, на несколько строк. В этой статье мы рассмотрим различные методы использования функции разнесения PySpark, используя разговорный язык и примеры кода, чтобы упростить ее понимание. Итак, давайте окунемся в мир развертывания массивов в PySpark!
Метод 1: использование функции взрыв()
Функция взрыв() — это самый простой способ разнести массивы в PySpark. Он принимает столбец массивов в качестве входных данных и возвращает новый DataFrame с каждым элементом массива в отдельной строке. Вот пример:
from pyspark.sql import SparkSession
from pyspark.sql.functions import explode
spark = SparkSession.builder.getOrCreate()
data = [("John", ["apple", "banana", "cherry"]),
("Alice", ["orange", "kiwi"]),
("Bob", ["grape"])]
df = spark.createDataFrame(data, ["name", "fruits"])
exploded_df = df.select("name", explode("fruits").alias("fruit"))
exploded_df.show()
Выход:
+-----+------+
| name| fruit|
+-----+------+
| John| apple|
| John|banana|
| John|cherry|
|Alice|orange|
|Alice| kiwi|
| Bob| grape|
+-----+------+
Метод 2: использование функцииposexplode()
Функцияposexplode() похожа на функцию взрыв(), но она также возвращает позицию каждого элемента в массиве. Это может быть полезно, если вы хотите отслеживать исходный порядок элементов массива. Вот пример:
from pyspark.sql.functions import posexplode
exploded_df = df.select("name", posexplode("fruits").alias("pos", "fruit"))
exploded_df.show()
Выход:
+-----+---+------+
| name|pos| fruit|
+-----+---+------+
| John| 0| apple|
| John| 1|banana|
| John| 2|cherry|
|Alice| 0|orange|
|Alice| 1| kiwi|
| Bob| 0| grape|
+-----+---+------+
Метод 3: использование функции взрыв_аутер()
Функция взрыв_аутер() аналогична функции взрыв(), но она также корректно обрабатывает нулевые или пустые массивы. Если массив имеет значение NULL или пуст, он возвращает значение NULL для всех столбцов. Вот пример:
from pyspark.sql.functions import explode_outer
data = [("John", ["apple", "banana", "cherry"]),
("Alice", None),
("Bob", [])]
df = spark.createDataFrame(data, ["name", "fruits"])
exploded_df = df.select("name", explode_outer("fruits").alias("fruit"))
exploded_df.show()
Выход:
+-----+------+
| name| fruit|
+-----+------+
| John| apple|
| John|banana|
| John|cherry|
|Alice| null|
| Bob| null|
+-----+------+
Метод 4: разнесение нескольких массивов
PySpark также позволяет разбивать несколько массивов одновременно. Вы можете просто передать несколько столбцов в функцию взрыв(). Вот пример:
data = [("John", ["apple", "banana"], [1, 2]),
("Alice", ["orange", "kiwi"], [3, 4]),
("Bob", ["grape"], [5])]
df = spark.createDataFrame(data, ["name", "fruits", "counts"])
exploded_df = df.select("name", explode("fruits").alias("fruit"), explode("counts").alias("count"))
exploded_df.show()
Выход:
+-----+------+-----+
| name| fruit|count|
+-----+------+-----+
| John| apple| 1|
| John|banana| 2|
|Alice|orange| 3|
|Alice| kiwi| 4|
| Bob| grape| 5|
+-----+------+-----+
В этой статье мы рассмотрели различные методы разнесения массивов в PySpark с использованием функции Explosion(), функции Posexplode() и функции Explosion_outer(). Мы также увидели, как разбить несколько массивов одновременно. Используя эти мощные функции, вы можете эффективно обрабатывать и манипулировать данными массива в PySpark. Так что вперед и раскройте потенциал расширяющихся массивов в своих проектах по работе с большими данными!