我需要汇总我的数据,以便它生成以下输出:
JSON输出
{
"people": [
{
"firstName": "Jimi",
"lastName": "Hendrix",
"age": "27"
},
{
"firstName": "Jimmy",
"lastName": "Page",
"age": "75"
}
]
}
但是,当运行聚合函数(如下)时,出现此错误:
Caused by: org:apache.spark.SparkSession: Job aborted due to stage failure: Total size of serialized results of <task_size> task (20GB) is bigger than spark.driver.maxResultSize (20.0 GB)
这使我相信
collect_list
函数是导致此问题的原因。它们不是并行运行任务,而是在单个节点上运行并耗尽内存。
创建JSON输出的最佳方法是什么?有什么方法可以优化collect_list
函数吗?
示例代码:
def aggregate(df):
return df.agg(collect_list(struct(
df.firstName,
df.lastName,
df.age
)).alias('people'))
答案 0 :(得分:0)
当您执行collect_list时,所有数据都作为列表收集到驱动程序。您可以使用JSON在数据框中创建一列,并将其存储为CSV来代替。
替代方法是使用-
增加驱动程序内存conf.set(“ spark.driver.maxResultSize”,“ 25g”)