new = (df.withColumn('todo', explode(flatten(array(*[map_values(from_json(x, "MAP<STRING,STRING>")) for x in df.columns])))) #From string to array to indivicual row
.withColumn('todo', translate('todo',"[]",'')#Remove corner brackets
) ).show(truncate=False)
2条答案
按热度按时间flvlnr441#
您引用的key-value是一个结构。“keys”是结构字段名,而“values”是字段值。
你要做的事情叫做取消透视,在PySpark中实现的方法之一是使用
stack
,下面是一个动态的方法,你不需要提供已经存在的列名。输入 Dataframe :
脚本:
de90aj5v2#
使用from_json将字符串转换为数组。分解以将每个唯一元素级联到行。
数据库
代码
结果