使用scala计算spark数据帧中列组合的实例

Dea*_*an 5 scala dataframe apache-spark

我在scala中有一个名为df的火花数据框,有两列,比如a和b.a列包含字母,b列包含下面的数字.

   a   b
----------
   g   0
   f   0
   g   0
   f   1
Run Code Online (Sandbox Code Playgroud)

我可以使用不同的行

val dfDistinct=df.select("a","b").distinct
Run Code Online (Sandbox Code Playgroud)

它给出了以下内容:

   a  b
----------
   g   0
   f   0
   f   1
Run Code Online (Sandbox Code Playgroud)

我想添加另一个列,其中包含这些不同组合在第一个数据帧中出现的次数,所以我最终得到了

a  b  count
  ----------
  g  0   2
  f  0   1
  f  1   1
Run Code Online (Sandbox Code Playgroud)

我不介意是否修改了原始命令,或者我对dfDistinct进行了单独的操作,给出了另一个数据帧.

任何建议都非常感谢,我为这个问题的微不足道的性质道歉,但我对scala或spark中的这种操作并不是最有经验的.

谢谢

院长

zer*_*323 10

您可以简单地聚合和计数:

df.groupBy($"a", $"b").count
Run Code Online (Sandbox Code Playgroud)

或者更冗长一点:

import org.apache.spark.sql.functions.{count, lit}

df.groupBy($"a", $"b").agg(count(lit(1)).alias("cnt"))
Run Code Online (Sandbox Code Playgroud)

两者都等同于原始SQL聚合:

df.registerTempTable("df")

sqlContext.sql("SELECT a, b, COUNT(1) AS cnt FROM df GROUP BY a, b")
Run Code Online (Sandbox Code Playgroud)

  • 当您知道它时,它总是很简单,但我发现获取信息并不容易。我是否缺少资源?谢谢,顺便说一句。正是我想要的。 (2认同)
  • 我不知道:)也许[Spark SQL和DataFrame指南](http://spark.apache.org/docs/latest/sql-programming-guide.html)? (2认同)