大佬教程收集整理的这篇文章主要介绍了从列中查找最大值并根据最大值填充另一列,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 csv 文件中有增量加载。我在数据框中读取了 csv。数据框有一列包含一些字符串。我必须从该列中找到不同的字符串,并在加入另一个数据帧后为从 ID
开始的每个值分配一个 0
(整数)。
在下一次运行中,我必须在找出 ID
列中的最大值并为不同的字符串递增后分配 ID。只要 ID
列中有空值,我必须从上次运行的值开始增加它 (+1)。
第一次运行
字符串 | ID |
---|---|
零 | 0 |
第一次 | 1 |
第二个 | 2 |
第三个 | 3 |
第四 | 4 |
第二次运行
@H_668_3@mAX(ID) = 4
字符串 | ID |
---|---|
零 | 0 |
第一次 | 1 |
第二个 | 2 |
第三个 | 3 |
第四 | 4 |
第五个 | 5 |
第六个 | 6 |
第七个 | 7 |
第八个 | 8 |
我已经试过了,但不能让它工作..
@H_668_3@max = df.agg({"ID": "max"}).collect()[0][0] df_incremented = df.withcolumn("ID",when(col("ID").isNull(),expr("max += 1")))
让我知道是否有一种简单的方法可以实现这一目标。
由于您只保留不同的值,因此您可以在窗口上使用 row_number
函数:
from pyspark.sql import Window
from pyspark.sql import functions as F
df = spark.createDataFrame(
[("a",),("a",("b",("c",("d",("e",)],("String",)
)
w = Window.orderBy("String")
df1 = df.disTinct().withcolumn("ID",F.row_number().over(w) - 1)
df1.show()
#+------+---+
#|String| ID|
#+------+---+
#| a| 0|
#| b| 1|
#| c| 2|
#| d| 3|
#| e| 4|
#+------+---+
现在让我们向该数据框中添加一些行,并使用 row_number
和 coalesce
仅将 ID
分配给空行(无需获取最大值):
df2 = df1.union(spark.sql("SELEct * from values ('f',null),('h',('i',null)"))
df3 = df2.withcolumn("ID",F.coalesce("ID",F.row_number(w) - 1))
df3.show()
#+------+---+
#|String| ID|
#+------+---+
#| a| 0|
#| b| 1|
#| c| 2|
#| d| 3|
#| e| 4|
#| f| 5|
#| h| 6|
#| i| 7|
#+------+---+
如果您也想保留重复的值并为它们分配相同的 ID
,请使用 dense_rank
而不是 row_number
。
以上是大佬教程为你收集整理的从列中查找最大值并根据最大值填充另一列全部内容,希望文章能够帮你解决从列中查找最大值并根据最大值填充另一列所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。