通过使用pyspark将列转换为行来解析数据框中的Json字符串列表?
Posted
技术标签:
【中文标题】通过使用pyspark将列转换为行来解析数据框中的Json字符串列表?【英文标题】:Parse list of Json strings in a dataframe by converting the column into rows using pyspark? 【发布时间】:2021-11-17 07:35:55 【问题描述】://Input
df = [
('"id":10, "number" : ["1.1", "1.2", "1.3"]',),
('"id":20, "number" : ["2.1", "2.2", "2.3"]',),
]
//数据帧中所需的输出
id | number |
---|---|
10 | 1.1 |
10 | 1.2 |
10 | 1.3 |
20 | 2.1 |
20 | 2.2 |
20 | 2.3 |
我尝试了 withColumn 但只能将其拆分为 2 列
df.withColumn("n",from_json(col("_1"),Sch)).select("n.*")
如何将第二列拆分为行,并为 pyspark 中的每个数字重复第一列?
任何帮助将不胜感激!蒂亚!
【问题讨论】:
【参考方案1】:您可以在这里使用explode
,例如
from pyspark.sql import functions as F
df.withColumn("n",F.from_json(F.col("_1"),Sch))\
.select("n.id",F.explode("n.number").alias("number"))
下面包含完整的可重现示例:
from pyspark.sql import functions as F
from pyspark.sql import types as T
df = [
('"id":10, "number" : ["1.1", "1.2", "1.3"]',),
('"id":20, "number" : ["2.1", "2.2", "2.3"]',),
]
Sch = T.StructType([
T.StructField("id",T.IntegerType(),True),
T.StructField("number",T.ArrayType(T.StringType()),True)
])
df = sparkSession.createDataFrame(df)
df.show()
df.withColumn("n",F.from_json(F.col("_1"),Sch))\
.select("n.id",F.explode("n.number").alias("number"))\
.show(truncate=False)
输出
+-------------------------------------------+
|_1 |
+-------------------------------------------+
|"id":10, "number" : ["1.1", "1.2", "1.3"]|
|"id":20, "number" : ["2.1", "2.2", "2.3"]|
+-------------------------------------------+
+----+------+
|n.id|number|
+----+------+
|10 |1.1 |
|10 |1.2 |
|10 |1.3 |
|20 |2.1 |
|20 |2.2 |
|20 |2.3 |
+----+------+
让我知道这是否适合你。
【讨论】:
成功了!谢谢你。一项更改:df = spark.createDataFrame(df)以上是关于通过使用pyspark将列转换为行来解析数据框中的Json字符串列表?的主要内容,如果未能解决你的问题,请参考以下文章