【问题标题】:Group by and count on Spark Data frame all columns按 Spark 数据框所有列分组并计数
【发布时间】:2019-08-12 08:30:34
【问题描述】:

我想使用 Spark Sql 对数据框的每一列执行分组。数据框将有大约。 1000 列。

我已经尝试迭代数据框中的所有列并在每一列上执行 groupBy。但程序执行超过 1.5 小时

val df = sqlContext
      .read
      .format("org.apache.spark.sql.cassandra")
      .options(Map( "table" -> "exp", "keyspace" -> "testdata"))
      .load()


val groupedData= channelDf.columns.map(c => channelDf.groupBy(c).count().take(10).toList)
println("Printing Dataset :"+ dataset)

如果我在数据框中有列,例如名称和金额,那么输出应该是这样的

GroupBy 列名称:

Name    Count
Jon     2
Ram     5
David   3

Amount 列上的 GroupBy:

Amount  Count
1000    4
2525    3
3000    3

我想要按每列的结果分组。

【问题讨论】:

    标签: scala apache-spark group-by apache-spark-sql


    【解决方案1】:

    我在这里看到加速的唯一方法是在阅读后立即缓存df

    不幸的是,每个计算都是独立的,你必须做它们,没有“变通”。

    这样的东西可以加快一点,但不是那么快:

    val df = sqlContext
          .read
          .format("org.apache.spark.sql.cassandra")
          .options(Map( "table" -> "exp", "keyspace" -> "testdata"))
          .load()
          .cache()
    

    【讨论】:

    • 这很有帮助。非常感谢您的回复。现在相同的代码在 4 分钟内执行
    • @Rajashree 我很高兴听到! :) 不要犹豫,接受答案 :)
    • 我没有获得投票权。一旦得到答案,我一定会接受。
    • @Rajashree,您不需要投票权即可接受,只需点击勾选即可,谢谢 :)
    猜你喜欢
    • 2021-07-22
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多