gpt4 book ai didi

apache-spark - PySpark - 拆分字符串列并将它们的一部分连接起来以形成新列

转载 作者:行者123 更新时间:2023-12-05 03:05:52 24 4
gpt4 key购买 nike

我有一个具有以下格式的数据框:

id    text
1 Amy How are you today? Smile
2 Sam Not very well. Sad

我想生成一个具有以下格式的新框架:

id    Name    Content              Expression
1 Amy How are you today? Smile
2 Sam Not very well. Sad

为此,我打算先拆分文本列:

cols = F.split(df['text'], ' ')
df = df.withColumn('Name', cols.getItem(0))

但是我如何获得内容和表达呢?我可以使用 cols.getItem(-1) 获取文本的最后一个元素吗?我如何加入 cols 中的 cols[1:-1](第二个元素到最后一个第二个元素)以形成新列 content


我调查了数据实际上不能保证句子中的双引号。唯一可以依靠的就是空间 split 。

最佳答案

给定输入dataframe,架构为

+---+----------------------------+
|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 |
+---+----+------------------+----------+

关于apache-spark - PySpark - 拆分字符串列并将它们的一部分连接起来以形成新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50222362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com