如何在PySpark中将无模式json列转换为dictionary、json或其他datafram

2024-10-01 02:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在PysPark工作,在这个领域我是个新手, 我有一个数据帧(df),有15列(例如col1、col2、col3、…col15)和一个相应的日志表,用于跟踪T内的更改,日志表(LG)有3列(ID、EntityID、changes),“changes”列保存更改。例如,我可能在LG内有如下字符串:

+----+---+-------------------------------------------------------------------+
|ID  | EntityID |        Changes                                             |
+----+---+-------------------------------------------------------------------+
|1   |2         |{"Col1" :val1 ; "Col2":val2 ; "Col12" : val12}              |
|2   |3         |{"Col7" :val7 ; "Col12":val12;"Col19":val19 ;"Col15":val15} |
|3   |3         |{"Col1" :val1 ; col2:val2; ....            ;"Col15":val15}  |
+----------------------------------------------------------------------------|

现在我想对“更改”中的内容进行聚合 e、 g总和(第5列)、平均值(第10列)分组依据(实体ID)和。。。。 我不知道“做什么”和“如何做”,对Dict或json甚至数据帧进行“更改”??怎么做呢?我从json上读到了关于爆炸和。。但问题是,我认为我的专栏不是格式良好的json。 如果有人能向我推荐一个解决方案,使我能够对字符串中的一些键和值进行聚合,我将不胜感激


Tags: 数据字符串idjsoncol2col1changeslg
1条回答
网友
1楼 · 发布于 2024-10-01 02:36:04

在这里,我找到了一种方法来做到这一点。 首先,需要检查Json(我有这样的{“col1”:10,“col2”:2020-04-01 16:55:12} 因此pyspark.sql.functions.from_json无法将json字符串映射到所需的模式。 将Col2改为“2020-04-01 16:55:12”解决了这个问题

#F is  pyspark.sql.functions
#schm in my json Schema sth like  
schm = StructType([
StructField("col1", LongType(), True),
StructField("col2", StringType(), True)])      
df.select(F.from_json(F.col("changes"),
schm
).alias("jsn")).select( 
"jsn.Col1","jsn.Col2").show()

相关问题 更多 >