Я хочу разбить столбец в фрейме данных PySpark, столбец (тип строки) выглядит следующим образом:
[{"quantity":25,"type":"coins","balance":35}]
[{"balance":40,"type":"coins","quantity":25}]
[{"quantity":2,"type":"column_breaker","balance":2},{"quantity":2,"type":"row_breaker","balance":2},{"quantity":2,"type":"single_block_breaker","balance":2},{"quantity":1,"type":"rainbow","balance":1},{"quantity":135,"type":"coins","balance":140}]
Таким образом, некоторые из них имеют набор "quantity, type, balance"
, а некоторые из нихесть несколько таких записей.Я попытался обработать его как переменную JSON и разделить:
schema = StructType(
[
StructField('balance', StringType(), True),
StructField('type', StringType(), True),
StructField('quantity', StringType(), True)
]
)
temp = merger.withColumn("data",
from_json("items",schema)).select("items", col('data.*'))
display(temp)
Но он мог разделить наблюдения только одним набором.Я хотел бы получить вывод, подобный
balance|quantity|type
35 | 25 |coins
40 | 25 |coins
.......
, чтобы наблюдения с одним набором делились на одно наблюдение, а наблюдения с несколькими наборами - на несколько наблюдений с вертикальным расположением.
Кроме того, как я могу выделить каждое наблюдение после разделения на несколько строк?Скажем, у меня есть другая переменная с идентификатором, как я могу присвоить идентификатор обратно?