apache-spark - Spark中密集等级和行数的差异

标签 apache-spark

我试图理解密集排名和行号之间的区别。每个新窗口分区都从 1 开始。行的排名并不总是从 1 开始吗?任何帮助将不胜感激

最佳答案

区别在于排序列中存在“关系”。检查下面的示例:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

val df = Seq(("a", 10), ("a", 10), ("a", 20)).toDF("col1", "col2")

val windowSpec = Window.partitionBy("col1").orderBy("col2")

df
  .withColumn("rank", rank().over(windowSpec))
  .withColumn("dense_rank", dense_rank().over(windowSpec))
  .withColumn("row_number", row_number().over(windowSpec)).show

+----+----+----+----------+----------+
|col1|col2|rank|dense_rank|row_number|
+----+----+----+----------+----------+
|   a|  10|   1|         1|         1|
|   a|  10|   1|         1|         2|
|   a|  20|   3|         2|         3|
+----+----+----+----------+----------+

请注意,值“10”在同一窗口内的 col2 中出现两次 (col1 = "a")。这时您就会看到这三个函数之间的差异。

关于apache-spark - Spark中密集等级和行数的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44968912/

相关文章:

scala - 为什么 spark 不断重新计算 RDD?

java - 使用 Spark 从服务器路径中的 Excel 文件创建 DataFrame

apache-spark - Spark : How to do a dropDuplicates on a dataframe while keeping the highest timestamped row

scala - 如何将路径列表传递给 spark.read.load?

python - 使用 foreach 方法处理旧数据帧创建新的 pyspark 数据帧时出现 Pickle 错误

java - SparkSQL 插入 Hive 表失败

scala - 在 Apache Spark 中,RandomForestClassifier 的输入带有无效标签列错误

scala - 如何使用Spark的repartitionAndSortWithinPartitions?

java - PySpark 是否调用 java api,然后 java api 调用 Apache Spark 中的 scala api?

Scala Spark : (org. apache.spark.repl.ExecutorClassLoader) 无法在路径上检查 REPL 类服务器上的类组织是否存在