Используйте array_repeat
+ size
:
import pyspark.sql.functions as f
df = spark.createDataFrame([[[1,2],'a'], [[1,2,3], 'b']], ['col1', 'col2'])
df.withColumn('col3', f.array_repeat('col2', f.size('col1'))).show()
+---------+----+---------+
| col1|col2| col3|
+---------+----+---------+
| [1, 2]| a| [a, a]|
|[1, 2, 3]| b|[b, b, b]|
+---------+----+---------+
Если в любом случае это не сработает, вы можете написать udf для этого:
from pyspark.sql.types import StringType, ArrayType
import pyspark.sql.functions as f
@f.udf(ArrayType(StringType()))
def repeat_sizeof(col1, col2):
return [col1] * len(col2)
df.withColumn('col3', repeat_sizeof('col2', 'col1')).show()
+---------+----+---------+
| col1|col2| col3|
+---------+----+---------+
| [1, 2]| a| [a, a]|
|[1, 2, 3]| b|[b, b, b]|
+---------+----+---------+