我知道
count
调用RDD或DataFrame是一个动作.但是在摆弄火花壳时,我发现了以下情况
scala> val empDF = Seq((1,"James Gordon",30,"Homicide"),(2,"Harvey Bullock",35,(3,"Kristen Kringle",28,"Records"),(4,"Edward Nygma","Forensics"),(5,"Leslie Thompkins",31,"Forensics")).toDF("id","name","age","department") empDF: org.apache.spark.sql.DataFrame = [id: int,name: string,age: int,department: string] scala> empDF.show +---+----------------+---+----------+ | id| name|age|department| +---+----------------+---+----------+ | 1| James Gordon| 30| Homicide| | 2| Harvey Bullock| 35| Homicide| | 3| Kristen Kringle| 28| Records| | 4| Edward Nygma| 30| Forensics| | 5|Leslie Thompkins| 31| Forensics| +---+----------------+---+----------+ scala> empDF.groupBy("department").count //count returned a DataFrame res1: org.apache.spark.sql.DataFrame = [department: string,count: bigint] scala> res1.show +----------+-----+ |department|count| +----------+-----+ | Homicide| 2| | Records| 1| | Forensics| 2| +----------+-----+
当我在GroupedData(empDF.groupBy(“department”))上调用count时,我得到另一个DataFrame作为结果(res1).这让我相信在这种情况下,计数是一个转变.当我调用count时没有触发任何计算这一事实进一步支持了它,相反,当我运行res1.show时它们就开始了.
我无法找到任何表明计数也可能是转换的文档.有人可以对此有所了解吗?
解决方法
您在代码中使用的.count()是通过RelationalGroupedDataset,它创建一个包含分组数据集中元素数量的新列.这是一种转变.参考:
https://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.sql.GroupedDataset
https://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.sql.GroupedDataset
通常在RDD / DataFrame / Dataset上使用的.count()与上面完全不同,而.count()是一个Action.参见:https://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.rdd.RDD
编辑:
在distributedDataSet上运行时,总是使用.count()和.agg(),以避免将来混淆:
empDF.groupBy($"department").agg(count($"department") as "countDepartment").show
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。