如何根据给定的 json 格式排列数据帧
Posted
技术标签:
【中文标题】如何根据给定的 json 格式排列数据帧【英文标题】:How to arrange dataframe according to the given json format 【发布时间】:2021-12-24 18:31:34 【问题描述】:这是我正在处理的数据框 我想把它改成如下格式的数据集
“身份证”: “唯一标识”:“标识” “细节” : “人名”:“姓名” “人名”:“年龄”
【问题讨论】:
【参考方案1】:你的 json 有几个问题。
-
在子 json“详细信息”中不能有两次相同的“人名”键
您缺少外部花括号。
所以修正后的 json 对象应该是这样的。
"Id": "Unique-id": "id", "Details": "Person-name": "name", "Person-age": "25"
如果是这样,那么转换就很简单了。
df = (spark.read.json('test.json')
.withColumn('Unique-Id', F.col('Id.Unique-id'))
.withColumn('age', F.col('Id.Details.Person-age'))
.withColumn('name', F.col('Id.Details.Person-name'))
.drop('Id')
.withColumnRenamed('Unique-Id', 'id')
)
【讨论】:
【参考方案2】:您只需要选择您需要的字段。假设以下输入 DataFrame:
case class Top(Id: Inner)
case class Inner(`Unique-id`: String, Details: Details)
case class Details(`Person-name`: String, `Person-age`: Int)
val ss: SparkSession = ???
import ss.implicits._
val df = Seq(
Top(Inner("1201", Details("satish", 25)))
).toDF
您将拥有以下内容:
root
|-- Id: struct (nullable = true)
| |-- Unique-id: string (nullable = true)
| |-- Details: struct (nullable = true)
| | |-- Person-name: string (nullable = true)
| | |-- Person-age: integer (nullable = false)
您可以使用以下命令构建所需的输出:
df.select(
col("Id.Unique-id") as "id",
col("Id.Details.Person-name") as "name",
col("Id.Details.Person-age") as "age",
)
【讨论】:
以上是关于如何根据给定的 json 格式排列数据帧的主要内容,如果未能解决你的问题,请参考以下文章