聚合火花数据框中的多列(所有组合)

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 中的两个集合

以上是关于聚合火花数据框中的多列(所有组合)的主要内容,如果未能解决你的问题,请参考以下文章

组合并计算火花数据框中的 json 列

java - 如何对Java中的列组合排序火花数据框?

使用单个表单组合框中的多列作为 MS Access 中的查询参数

在火花数据框中聚合期间过滤数组值

如何替换火花数据框所有列中的多个字符?

如何在数据框中聚合具有多列的重复行[重复]