Я выполняю сценарий 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 минут.