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)