将列中的值重写为列表中的下一个值



我试图预处理Spark数据框中的列,该列包含int值,例如[41,43,45,59,72]。我想过程数据,得到下一个价值5步骤例如41->40, 43->45, 45->45, 59->60 ....

我如何在PySpark数据框架中以最优的方式做到这一点?

F.round(F.col('c1') / 5) * 5
from pyspark.sql import functions as F
df = spark.createDataFrame([(41,), (43,), (45,), (59,), (72,)], ['c1'])
df = df.withColumn('c2', (F.round(F.col('c1') / 5) * 5).cast('int'))
df.show()
# +---+---+
# | c1| c2|
# +---+---+
# | 41| 40|
# | 43| 45|
# | 45| 45|
# | 59| 60|
# | 72| 70|
# +---+---+

若要重写,而不是使用新名称,请使用现有的列名:

from pyspark.sql import functions as F
df = spark.createDataFrame([(41,), (43,), (45,), (59,), (72,)], ['c1'])
df = df.withColumn('c1', (F.round(F.col('c1') / 5) * 5).cast('int'))
df.show()
# +---+
# | c1|
# +---+
# | 40|
# | 45|
# | 45|
# | 60|
# | 70|
# +---+

相关内容

最新更新