Вы можете использовать explode
и pivot
. Вот некоторые примеры данных:
df=sc.parallelize([["1-2-3-4-5-6-7-8-9-10-11-12"], ["1-2-3-4"], ["1-2-3-4-5-6-7-8-9-10"]]).toDF(schema=["col"])
Теперь добавьте уникальный идентификатор в строки, чтобы мы могли отслеживать, к какой строке относятся данные:
df=df.withColumn("id", f.monotonically_increasing_id())
Затем разделите столбцы по разделителю -
, а затем взорвитесь, чтобы получить длинный набор данных:
df=df.withColumn("col_split", f.explode(f.split("col", "\-")))
Наконец, поверните id
, чтобы вернуться к широкой форме:
df.groupby("id")
.pivot("col_split")
.agg(f.max("col_split"))
.drop("id").show()