Заданный ввод фрейм данных со схемой
+---+----------------------------+
|id |text |
+---+----------------------------+
|1 |Amy How are you today? Smile|
|2 |Sam Not very well. Sad |
+---+----------------------------+
root
|-- id: long (nullable = true)
|-- text: string (nullable = true)
Вы можете просто использовать следующую функцию udf
, чтобы выполнить ваше требование
from pyspark.sql import functions as f
from pyspark.sql import types as t
@f.udf(t.StructType([t.StructField("Name", t.StringType(), True), t.StructField("Content", t.StringType(), True), t.StructField("Expression", t.StringType(), True)]))
def splitCols(array):
return (array[0], ' '.join(array[1:len(array)-1]), array[len(array)-1])
df.withColumn('text', splitCols(f.split('text', ' ')))\
.select(f.col('id'), f.col('text.*'))\
.show(truncate=False)
, который должен дать вам
+---+----+------------------+----------+
|id |Name|Content |Expression|
+---+----+------------------+----------+
|1 |Amy |How are you today?|Smile |
|2 |Sam |Not very well. |Sad |
+---+----+------------------+----------+