如何根据给定的 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 格式排列数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别