我创建了一个结构体,其中包含一些列的数据。现在,我的唯一标识符值出现了大量这些结构。我想使用collect_list 将这些结构组合成一个数组。 不幸的是,我遇到了类似的错误
java.lang.Exception: Results too large
at com.databricks.backend.daemon.driver.OutputAggregator$.maybeApplyOutputAggregation(OutputAggregator.scala:458)
那么,Spark 列中的数组可以包含多少个元素(在我的例子中是结构体)?
这是我正在使用的 Scala 代码
val compact_df = deliveries_df
.withColumn("file_detail", struct($"file_id", $"delivery_seqno", $"file_path_name"))
.groupBy('delivery_id, 'delivery_file_type)
.agg(collect_list('file_detail).alias("file_details"))
display(compact_df)
数组(和映射)受到 jvm 的限制 - 未登录的价值为 20 亿。
考虑到每行都由字节数组支持,在单个数组大小之前也可能满足 2GB 的行/块限制。