У меня есть датафрейм с данными из записной книжки Python для Azure Consumtion Databricks. Я показываю здесь только подмножество столбцов / строк.
[Row(ResourceRate='0.029995920244854', PreTaxCost='0.719902085876484',
ResourceType='Microsoft.Compute/virtualMachines', Tags=None, ),
Row(ResourceRate='1.10999258782982', PreTaxCost='26.6398221079157',
ResourceType='Microsoft.Compute/virtualMachines',
Tags='"{ ""project"": ""70023"", ""service"": ""10043""}"')
]
Мне нужно извлечь теги из столбца Теги и представить их как столбцы (таблицы).
Кстати, я не уверен, где мне взять эти пары двойных кавычек. Вероятно, из исходной таблицы Beeing .csv. Но это, вероятно, легко решить в конце.
Я использую pyspark. Я пытался сделать что-то вроде этого Разделить столбец строки Spark Dataframe на несколько столбцов
from pyspark.sql.functions import monotonically_increasing_id
from pyspark.sql.functions import split, posexplode, concat, expr, lit, col, first
df2 = df.withColumn("num", monotonically_increasing_id())
df3 = df2.select(
"num",
split("Tags", ", ").alias("Tags"),
posexplode(split("Tags", ",")).alias("pos", "val")
)
#display(df3)
df4 = df3.drop("val")\
.select(
"num",
concat(lit("Tag"),col("pos").cast("string")).alias("name"),
expr("Tags[pos]").alias("val")
)
# display(df4)
df5 = df4.groupBy("num").pivot("name").agg(first("val"))
display(df5)
Это не совсем то, что я хочу.
num Tag0
964
1677 """project"": ""70023"", """service"": ""10024""
2040 """project"": ""70025"", """service"": ""10034""
2214
...
Я бы предпочел получать теги в виде столбцов:
num project service ResourceRate PreTaxCost
964 0.029995920244854 0.719902085876484
677 70023 10024 1.10999258782982 26.6398221079157
2040 70025 10034 0.029995920244854 0.719902085876484
2214 0.029995920244854 0.719902085876484
...