pyspark-struct将字符串转换为多列

4sup72z8  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(490)

我有一个Dataframe,其模式如下:

root
 |-- column: struct (nullable = true)
 |    |-- column-string: string (nullable = true)
 |-- count: long (nullable = true)

我想做的是:
去掉struct—或者我的意思是“promote”列字符串,所以我的Dataframe只有2列—列字符串和计数
然后,我想将列字符串拆分为3个不同的列,这样就得到了架构:

列字符串中的文本总是符合以下格式:some text,text,moretext
有人知道这怎么可能吗?
我在用pyspark python。
另外,我对pyspark还不熟悉&我对struct格式不太了解,也找不到如何在我的文章中写一个例子使其可复制-抱歉。

kgqe7b3p

kgqe7b3p1#

你也可以使用 from_csv 要将逗号分隔的字符串转换为结构,然后展开结构:

import pyspark.sql.functions as F

df2 = df.withColumn(
    'col',
    F.from_csv(
        'column.column-string',
        '`column-string` string, `column-string2` string, `column-string3` string'
    )
).select('col.*', 'count')

df2.show()
+-------------+--------------+--------------+-----+
|column-string|column-string2|column-string3|count|
+-------------+--------------+--------------+-----+
|     SomeText|          Text|      MoreText|    1|
+-------------+--------------+--------------+-----+

请注意,列名中最好不要使用连字符,因为它们是为减法保留的。下划线更好。

0kjbasz6

0kjbasz62#

您可以选择 column-string 使用 column.column-string ,只需用逗号分隔即可得到三列:

from pyspark.sql import functions as F

df1 = df.withColumn(
    "column_string", F.split(F.col("column.column-string"), ",")
).select(
    F.col("column_string")[0].alias("column-string"),
    F.col("column_string")[1].alias("column-string2"),
    F.col("column_string")[2].alias("column-string3"),
    F.col("count")
)

相关问题