Есть ли способ ускорить выполнение функции разнесения в Spark? - PullRequest
3 голосов
/ 30 мая 2019

Я выполняю сценарий ETL Spark, который работает с файлами JSON.В этих файлах есть много массивов, которые я по своей природе взрываю через pyspark.sql.functions.explode для создания стандартных 2D таблиц.Однако есть несколько массивов, которые достаточно велики по размеру, и когда я их взрываю, выполнение занимает много времени (около 30 минут).

Есть ли способ ускорить это, с помощью настройки SparkSession или просто с помощью какой-либо другой функциональности?

Пример кода:

import pyspark.sql.functions as f

# df is a Spark dataframe with ArrayType column `large_array_column`
df.select(f.explode("large_array_column")).write.format("orc").save("test.orc")

Чтобы немного подробнее рассказать ораспределение размеров:

df.select(f.size("large_array_column").alias("array_size")). \
 orderBy(f.desc("array_size")).show(20, False)

+----------+
|array_size|
+----------+
|19571     |
|17478     |
|11183     |
|10836     |
|9345      |
|7254      |
|7198      |
|6409      |
|4761      |
|4012      |
|3434      |
|3396      |
|2815      |
|2674      |
|2259      |
|2094      |
|1998      |
|1858      |
|1797      |
|1657      |
+----------+

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...