分组并依靠Spark Data框架的所有列

时间:2019-08-12 08:30:34

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

我想使用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  Count
1000    4
2525    3
3000    3

我希望每一列都按结果分组。

1 个答案:

答案 0 :(得分:0)

在这里我能看到的唯一方法是在读取df之后直接对其进行缓存。

不幸的是,每个计算都是独立的,您必须要做,没有“解决方法”。

类似的东西可以加快一点,但速度却不那么快:

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