如何使用Scala基于Spark中的条件获取row_number()

abc_spark

我有以下数据框-

+----+-----+---+
| val|count| id|
+----+-----+---+
|   a|   10| m1|
|   b|   20| m1|
|null|   30| m1|
|   b|   30| m2|
|   c|   40| m2|
|null|   50| m2|
+----+-----+---+

由...制作 -

 val df1=Seq(
 ("a","10","m1"),
 ("b","20","m1"),
 (null,"30","m1"),
 ("b","30","m2"),
 ("c","40","m2"),
 (null,"50","m2")
 )toDF("val","count","id")

我正在尝试通过row_number()和窗口功能来进行排名,如下所示。

df1.withColumn("rannk_num", row_number() over Window.partitionBy("id").orderBy("count")).show
+----+-----+---+---------+
| val|count| id|rannk_num|
+----+-----+---+---------+
|   a|   10| m1|        1|
|   b|   20| m1|        2|
|null|   30| m1|        3|
|   b|   30| m2|        1|
|   c|   40| m2|        2|
|null|   50| m2|        3|
+----+-----+---+---------+

但是我必须用列-val的空值过滤那些记录。

预期产出-

+----+-----+---+---------+
| val|count| id|rannk_num|
+----+-----+---+---------+
|   a|   10| m1|        1|
|   b|   20| m1|        2|
|null|   30| m1|     NULL|
|   b|   30| m2|        1|
|   c|   40| m2|        2|
|null|   50| m2|     NULL|
+----+-----+---+---------+

想知道这是否有可能以最小的变化实现。val和count列也可以有'n'个值。

麦克

使用null val过滤那些行,为它们分配一个空行号,然后合并回原始数据框。

val df1=Seq(
 ("a","10","m1"),
 ("b","20","m1"),
 (null,"30","m1"),
 ("b","30","m2"),
 ("c","40","m2"),
 (null,"50","m2")
 ).toDF("val","count","id")

df1.filter("val is not null").withColumn(
    "rannk_num", row_number() over Window.partitionBy("id").orderBy("count")
).union(
    df1.filter("val is null").withColumn("rannk_num", lit(null))
).show
+----+-----+---+---------+
| val|count| id|rannk_num|
+----+-----+---+---------+
|   a|   10| m1|        1|
|   b|   20| m1|        2|
|   b|   30| m2|        1|
|   c|   40| m2|        2|
|null|   30| m1|     null|
|null|   50| m2|     null|
+----+-----+---+---------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何基于Spark Scala中的条件获取结果

来自分类Dev

在带条件的删除查询中获取row_number

来自分类Dev

如何使用条件和PARTITION BY制作ROW_NUMBER()函数?

来自分类Dev

如何获取ROW_NUMBER()的替代值?

来自分类Dev

ROW_NUMBER()基于日期

来自分类Dev

ROW_NUMBER()基于日期

来自分类Dev

如何仅基于ROW_NUMBER()更新行?

来自分类Dev

如何仅基于ROW_NUMBER()更新行?

来自分类Dev

如何正确使用Row_Number()

来自分类Dev

如何在SQL中修改Row_Number语法,以便根据条件分配行号?

来自分类Dev

如何获得Spark RDD的等效SQL row_number?

来自分类Dev

如何在ROW_NUMBER()函数和联合中获取过滤器记录?

来自分类Dev

如何在hive sql中获取每个组的最大row_number()

来自分类Dev

如何在 Hive 查询中使用 row_number 来获取最新的用户登录信息?

来自分类Dev

使用ROW_NUMBER()和where子句获取未过滤表中的行号

来自分类Dev

如何在不使用ROW_NUMBER()的情况下模仿ROW_NUMBER()功能?

来自分类Dev

具有基于滞后条件的Oracle SQL ROW_NUMBER()窗口

来自分类Dev

如何在z / OS上的DB2 10中使用ROW_NUMBER?

来自分类Dev

如何使用row_number()将行号分配给Postgresql中的重复值

来自分类Dev

如何在z / OS上的DB2 10中使用ROW_NUMBER?

来自分类Dev

PostgreSQL中的Row_number()

来自分类Dev

Row_number()取决于条件

来自分类Dev

如何在UPDATE子句中使用ROW_NUMBER()?

来自分类Dev

如果未识别列名,如何使用ROW_NUMBER()?

来自分类Dev

使用Row_Number时如何跳过NULL(或0)?

来自分类Dev

如果未识别列名,如何使用ROW_NUMBER()?

来自分类Dev

如何在SQLite中使用ROW_NUMBER()?

来自分类Dev

如何在SQL中使用ROW_NUMBER()更新列

来自分类Dev

如何避免使用row_number嵌套SQL查询

Related 相关文章

  1. 1

    如何基于Spark Scala中的条件获取结果

  2. 2

    在带条件的删除查询中获取row_number

  3. 3

    如何使用条件和PARTITION BY制作ROW_NUMBER()函数?

  4. 4

    如何获取ROW_NUMBER()的替代值?

  5. 5

    ROW_NUMBER()基于日期

  6. 6

    ROW_NUMBER()基于日期

  7. 7

    如何仅基于ROW_NUMBER()更新行?

  8. 8

    如何仅基于ROW_NUMBER()更新行?

  9. 9

    如何正确使用Row_Number()

  10. 10

    如何在SQL中修改Row_Number语法,以便根据条件分配行号?

  11. 11

    如何获得Spark RDD的等效SQL row_number?

  12. 12

    如何在ROW_NUMBER()函数和联合中获取过滤器记录?

  13. 13

    如何在hive sql中获取每个组的最大row_number()

  14. 14

    如何在 Hive 查询中使用 row_number 来获取最新的用户登录信息?

  15. 15

    使用ROW_NUMBER()和where子句获取未过滤表中的行号

  16. 16

    如何在不使用ROW_NUMBER()的情况下模仿ROW_NUMBER()功能?

  17. 17

    具有基于滞后条件的Oracle SQL ROW_NUMBER()窗口

  18. 18

    如何在z / OS上的DB2 10中使用ROW_NUMBER?

  19. 19

    如何使用row_number()将行号分配给Postgresql中的重复值

  20. 20

    如何在z / OS上的DB2 10中使用ROW_NUMBER?

  21. 21

    PostgreSQL中的Row_number()

  22. 22

    Row_number()取决于条件

  23. 23

    如何在UPDATE子句中使用ROW_NUMBER()?

  24. 24

    如果未识别列名,如何使用ROW_NUMBER()?

  25. 25

    使用Row_Number时如何跳过NULL(或0)?

  26. 26

    如果未识别列名,如何使用ROW_NUMBER()?

  27. 27

    如何在SQLite中使用ROW_NUMBER()?

  28. 28

    如何在SQL中使用ROW_NUMBER()更新列

  29. 29

    如何避免使用row_number嵌套SQL查询

热门标签

归档