优化在Pyspark中大量列进行累积总和的方法



我有一个包含752(ID,日期和750个功能列)列的数据帧,大约150万行,我需要在所有750个功能列分区上应用累积总和日期。

以下是我目前遵循的方法:

# putting all 750 feature columns in a list
required_columns = ['ts_1','ts_2'....,'ts_750']
# defining window
sumwindow = Window.partitionBy('id').orderBy('date')
# Applying window to calculate cumulative of each individual feature column
for current_col in required_columns:
    new_col_name = "sum_{0}".format(current_col)
    df=df.withColumn(new_col_name,sum(col(current_col)).over(sumwindow))
# Saving the result into parquet file    
df.write.format('parquet').save(output_path)

我在运行此当前方法时要低于错误

py4j.protocol.Py4JJavaError: An error occurred while calling o2428.save.
: java.lang.StackOverflowError

请让我知道相同的替代解决方案。大量数据似乎有点棘手。请建议任何替代方法或我可以调节它可以正常工作的任何火花配置。

我希望您有太大的血统问题。重新分配数据框后,请看一下您的解释计划。

标准解决方案是每隔一段时间检查您的数据框架,以截断解释计划。这有点像缓存,但对于计划而不是数据,通常需要修改数据框架的迭代算法。

这是缓存和检查点的不错的pyspark解释

我建议每5-10修改以

开始,建议df.checkpoint()

让我们知道它的发展

相关内容

  • 没有找到相关文章

最新更新