Раскрытие возможностей PySpark Explode: руководство по разнесению массивов в PySpark

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. Так что вперед и раскройте потенциал расширяющихся массивов в своих проектах по работе с большими данными!