聚合火花数据框中的多列(所有组合)
Posted
技术标签:
【中文标题】聚合火花数据框中的多列(所有组合)【英文标题】:Aggregate on multiple columns in spark dataframe (all combination) 【发布时间】:2017-09-30 18:40:14 【问题描述】:我想根据我在数据框中的所有列组合来计算客户数量。
例如:-假设我有 5 列的数据框。
id, col1, col2, col3, cust_id
我需要所有组合的客户数量:
id, col1, count(cust_id)
id, col1, col2, count(cust_id)
id, col1, col3, count(cust_id)
id, col1, col2, col3, count(cust_id)
id, col2, count(cust_id)
id, col2, col3, count(cust_id)
等等所有排列和组合。
很难单独为数据框的groupBy功能提供所有不同的组合,然后汇总客户数量。
有什么方法可以实现这一点,然后将所有结果合并到一个数据帧中,这样我们就可以将结果写入一个输出文件。
对我来说它看起来有点复杂,如果有人能提供任何解决方案,我真的很感激。如果需要更多详细信息,请告诉我。
非常感谢。
【问题讨论】:
感谢劳尔,感谢您的帮助。会试试这个,让你知道 嗨 Raul,是否可以在多维数据集函数中提供一组 col,例如 (col1, col2), (col3,col4) 作为 CUBE 中的两个集合 【参考方案1】:有可能and it is called cube
:
df.cube("id", "col1", "col2", "col3").agg(count("cust_id"))
.na.drop(minNonNulls=3) // To exclude some combinations
SQL版本还提供了GROUPING SET
,比.na.drop
效率更高。
【讨论】:
嗨 Raul,是否可以在多维数据集函数中提供一组 col,例如 (col1, col2), (col3,col4) 作为 CUBE 中的两个集合以上是关于聚合火花数据框中的多列(所有组合)的主要内容,如果未能解决你的问题,请参考以下文章