我正在执行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 |
+----------+
如您所见,这些数组根本没有那么大,但是展开此数组列并将其保存到新文件中大约需要花费大约2倍的时间。 30分钟。