如何从另一列提供array_repeat函数的计数值?

时间:2020-05-21 17:12:09

标签: pyspark

如何从另一列提供array_repeat函数计数值:

>>>import pyspark.sql.functions as F
>>>dftmp = spark.createDataFrame([('ab',)], ['data'])

>>>dftmp.select(F.array_repeat(dftmp.data, 3).alias('r'))
>>>dftmp.show()
+----+------------+
|data|      repeat|
+----+------------+
|  ab|[ab, ab, ab]|
+----+------------+

有没有一种方法可以使用基于另一列的重复计数值?例如

>>>dftmp.withColumn('len',  F.length(F.col('data')) )
>>>dftmp.withColumn('repeat', F.array_repeat(dftmp.data, F.col('len')))
TypeError: Column is not iterable

预期结果

+----+------------+---+
|data|      repeat|len|
+----+------------+---+
|  ab|[ab, ab]    |  2|
+----+------------+---+

1 个答案:

答案 0 :(得分:2)

您可以使用 .expr

from pyspark.sql import functions as F

dftmp.withColumn('repeat', F.expr("""array_repeat(data, len)"""))

或者您也可以在其中 calculate length

dftmp.withColumn('repeat', F.expr("""array_repeat(data, length(data))"""))