如何忽略 Scala/Spark 中 Groupby 中的第一个元素?
How do I ignore first element in Groupby in Scala /Spark?
我正在使用 Spark2、Zeppelin 和 Scala 来显示数据集中出现次数最多的 10 个单词。
我的代码:
z.show(dfFlat.groupBy("value").count().sort(desc("count")), 10)
给出:
如何忽略 'cat' 并让绘图从 'hat' 开始,即显示第二个到最后一个元素?
我试过了:
z.show(dfFlat.groupBy("value").count().sort(desc("count")).slice(2,4), 10)
但这给出了:
error: value slice is not a member of org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
在数据框中删除第一行并不直接(另请参阅 Drop first row of Spark DataFrame)。但是你可以使用 window-functions:
val df = Seq(
"cat", "cat", "cat", "hat", "hat", "bat"
).toDF("value")
val dfGrouped = df
.groupBy($"value").count()
.sort($"count".desc)
dfGrouped.show()
+-----+-----+
|value|count|
+-----+-----+
| cat| 3|
| hat| 2|
| bat| 1|
+-----+-----+
val dfWithoutFirstRow = dfGrouped
.withColumn("rank", dense_rank().over(Window.partitionBy().orderBy($"count".desc)))
.where($"rank" =!= 1).drop($"rank") // this filters "cat"
.sort($"count".desc)
dfWithoutFirstRow
.show()
+-----+-----+
|value|count|
+-----+-----+
| hat| 2|
| bat| 1|
+-----+-----+
第一行可以这样删除:
val filteredValue = dfGrouped.first.get(0)
val result = dfGrouped.filter(s"value!='$filteredValue'")
我正在使用 Spark2、Zeppelin 和 Scala 来显示数据集中出现次数最多的 10 个单词。 我的代码:
z.show(dfFlat.groupBy("value").count().sort(desc("count")), 10)
给出:
我试过了:
z.show(dfFlat.groupBy("value").count().sort(desc("count")).slice(2,4), 10)
但这给出了:
error: value slice is not a member of org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
在数据框中删除第一行并不直接(另请参阅 Drop first row of Spark DataFrame)。但是你可以使用 window-functions:
val df = Seq(
"cat", "cat", "cat", "hat", "hat", "bat"
).toDF("value")
val dfGrouped = df
.groupBy($"value").count()
.sort($"count".desc)
dfGrouped.show()
+-----+-----+
|value|count|
+-----+-----+
| cat| 3|
| hat| 2|
| bat| 1|
+-----+-----+
val dfWithoutFirstRow = dfGrouped
.withColumn("rank", dense_rank().over(Window.partitionBy().orderBy($"count".desc)))
.where($"rank" =!= 1).drop($"rank") // this filters "cat"
.sort($"count".desc)
dfWithoutFirstRow
.show()
+-----+-----+
|value|count|
+-----+-----+
| hat| 2|
| bat| 1|
+-----+-----+
第一行可以这样删除:
val filteredValue = dfGrouped.first.get(0)
val result = dfGrouped.filter(s"value!='$filteredValue'")