Pyspark 作业被困在最后的任务
Pyspark job being stuck at the final task
我的程序流程是这样的:
1. 从 parquet 文件中读取 40 亿行(约 700GB)数据到数据框中。使用的分区大小为 2296
2.清理并过滤掉25亿行
3. 使用流水线模型和经过训练的模型转换剩余的 15 亿行。该模型使用逻辑回归模型进行训练,其中它预测 0 或 1,并且 30% 的数据从转换后的数据框中过滤掉。
4. 上面的数据框与另一个约 1 TB 的数据集(也是从镶木地板文件中读取的)左外连接。分区大小为 4000
5. 将其与另一个大约 100 MB 的数据集合并,例如
joined_data = data1.join(broadcast(small_dataset_100MB), data1.field == small_dataset_100MB.field, "left_outer")
6. 然后将上面的数据框分解为~2000
exploded_data = joined_data.withColumn('field', explode('field_list'))
7、进行聚合
aggregate = exploded_data.groupBy(*cols_to_select)\
.agg(F.countDistinct(exploded_data.field1).alias('distincts'), F.count("*").alias('count_all'))
cols_to_select
列表中一共有10列。
8. 最后执行一个动作,aggregate.count()
。
问题是,倒数第三个计数阶段(200 个任务)永远停留在任务 199。尽管分配了 4 个核心和 56 个执行程序,但计数仅使用一个核心和一个执行程序来 运行 作业。我尝试将大小从 40 亿行分解为 7 亿行,这是 1/6 的部分,花了四个小时。如果能帮助我加快这个过程,我将不胜感激谢谢
由于将倾斜的数据连接到一个巨大的数据集,该操作被卡在了最后的任务中。连接两个数据框的密钥严重倾斜。现在通过从数据框中删除倾斜的数据解决了这个问题。如果必须包含倾斜数据,可以使用迭代广播连接 (https://github.com/godatadriven/iterative-broadcast-join). Look into this informative video for more details https://www.youtube.com/watch?v=6zg7NTw-kTQ
我的程序流程是这样的:
1. 从 parquet 文件中读取 40 亿行(约 700GB)数据到数据框中。使用的分区大小为 2296
2.清理并过滤掉25亿行
3. 使用流水线模型和经过训练的模型转换剩余的 15 亿行。该模型使用逻辑回归模型进行训练,其中它预测 0 或 1,并且 30% 的数据从转换后的数据框中过滤掉。
4. 上面的数据框与另一个约 1 TB 的数据集(也是从镶木地板文件中读取的)左外连接。分区大小为 4000
5. 将其与另一个大约 100 MB 的数据集合并,例如
joined_data = data1.join(broadcast(small_dataset_100MB), data1.field == small_dataset_100MB.field, "left_outer")
6. 然后将上面的数据框分解为~2000 exploded_data = joined_data.withColumn('field', explode('field_list'))
7、进行聚合 aggregate = exploded_data.groupBy(*cols_to_select)\
.agg(F.countDistinct(exploded_data.field1).alias('distincts'), F.count("*").alias('count_all'))
cols_to_select
列表中一共有10列。
8. 最后执行一个动作,aggregate.count()
。
问题是,倒数第三个计数阶段(200 个任务)永远停留在任务 199。尽管分配了 4 个核心和 56 个执行程序,但计数仅使用一个核心和一个执行程序来 运行 作业。我尝试将大小从 40 亿行分解为 7 亿行,这是 1/6 的部分,花了四个小时。如果能帮助我加快这个过程,我将不胜感激谢谢
由于将倾斜的数据连接到一个巨大的数据集,该操作被卡在了最后的任务中。连接两个数据框的密钥严重倾斜。现在通过从数据框中删除倾斜的数据解决了这个问题。如果必须包含倾斜数据,可以使用迭代广播连接 (https://github.com/godatadriven/iterative-broadcast-join). Look into this informative video for more details https://www.youtube.com/watch?v=6zg7NTw-kTQ