我有一个包含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()让我们知道它的发展