gpt4 book ai didi

scala - Apache Spark 根据列的不同值计算列值

转载 作者:行者123 更新时间:2023-12-04 10:04:05 25 4
gpt4 key购买 nike

我正在处理下表,我想根据其他 2 个列的不同值计算一个新列(结果)。

| id1  | id2 | outcome
| 1 | 1 | 1
| 1 | 1 | 1
| 1 | 3 | 2
| 2 | 5 | 1
| 3 | 1 | 1
| 3 | 2 | 2
| 3 | 3 | 3

结果应根据 id1 的组合值以从 1 开始的递增顺序开始。和 id2 .任何提示如何在 Scala 中完成此操作。 row_number在这种情况下,这里似乎没有用。

这里的逻辑是对于 id1 的每个唯一值我们将开始用 min( id2 ) 为相应的 id1 编号结果被赋值为 1。

最佳答案

你可以试试dense_rank()

用你的例子

      val df = sqlContext
.read
.option("sep","|")
.option("header", true)
.option("inferSchema",true)
.csv("/home/cloudera/files/tests/ids.csv") // Here we read the .csv files
.cache()

df.show()
df.printSchema()

df.createOrReplaceTempView("table")
sqlContext.sql(
"""
|SELECT id1, id2, DENSE_RANK() OVER(PARTITION BY id1 ORDER BY id2) AS outcome
|FROM table
|""".stripMargin).show()

输出
+---+---+-------+
|id1|id2|outcome|
+---+---+-------+
| 2| 5| 1|
| 1| 1| 1|
| 1| 1| 1|
| 1| 3| 2|
| 3| 1| 1|
| 3| 2| 2|
| 3| 3| 3|
+---+---+-------+

关于scala - Apache Spark 根据列的不同值计算列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61678331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com