最近,我正在研究一个大型的键-值-值数据集。我想按名称分组,按键旋转,然后为这些值选择第一个值以生成新列。
操作如下(在Spark sql中):
val df: DataFrame
df.groupBy("key").pivot("name").agg(first("value"))
// all executors go out of memory for an input file of 600MB
df.write.parquet("...")
问题是,当前需要生成约5000列,并且每个键都有大量的空值。由于SQL似乎为每个新列都建立了if-else语句,所以我想知道此问题的时间和空间复杂度是多少(因为所有执行程序似乎都内存不足)。
预先感谢