如果fulltext 中的值是字符串,您可以先使用from_json 示例将其转换为映射类型
from pyspark.sql import functions as F
from pyspark.sql import types as T
df = df.withColumn("fulltext",F.from_json("fulltext",T.MapType(T.StringType(),T.StringType())))
在应用explode 函数将值拆分为多行之前,例如:
from pyspark.sql import functions as F
from pyspark.sql import types as T
df = df.select(F.explode("fulltext"))
df.show(truncate=False)
+---+-----+
|key|value|
+---+-----+
|0 |Hello|
|1 |Tweet|
|2 |Bye |
+---+-----+
编辑 1
如果fulltext里面的值是一个结构体,你可以先
- 使用
cast将其转换为字符串
- 使用
regexp_replace 替换多余的字符大括号
- 使用
split以逗号分隔字符串
- 使用
explode 分解拆分值以获得所需的行
例如
from pyspark.sql import functions as F
from pyspark.sql import types as T
df = df.withColumn("fulltext",F.col("fulltext").cast("string"))
df.printSchema() # only for debugging purposes
df.show() # only for debugging purposes
df = df.withColumn("fulltext",F.explode(F.split(F.regexp_replace("fulltext","\\{|\\}",""),",")))
df.show() # only for debugging purposes
root
|-- fulltext: string (nullable = false)
+-------------------+
| fulltext|
+-------------------+
|{Hello, Tweet, Bye}|
+-------------------+
+--------+
|fulltext|
+--------+
| Hello|
| Tweet|
| Bye|
+--------+