首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将json格式转化为关系形式?

如何将json格式转化为关系形式?
EN

Stack Overflow用户
提问于 2022-03-02 10:28:52
回答 1查看 49关注 0票数 0

这是我的密码:

代码语言:javascript
复制
%spark.pyspark

df_principalBody = spark.sql("""
 SELECT
      gtin
      , principalBodyConstituents
      --, principalBodyConstituents.coatings.materialType.value
    FROM
      v_df_source""")

df_principalBody.createOrReplaceTempView("v_df_principalBody")

df_principalBody.collect();

这是输出:

代码语言:javascript
复制
[Row(gtin='7617014161936', principalBodyConstituents=[Row(coatings=[Row(materialType=Row(value='003', valueRange='405')

如何以关系格式读取值和valueRange字段?我试着用爆炸和扁平,但它是行不通的。

我的json的一部分:

代码语言:javascript
复制
{
  "gtin": "7617014161936",
  "timePeriods": [
    {
      "fractionData": {
        "principalBody": {
          "constituents": [
            {
              "coatings": [
                {
                  "materialType": {
                    "value": "003",
                    "valueRange": "405"
                  },
                  "percentage": 0.1
                }
              ],
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-03 20:52:47

您可以使用data_dict.items()列出键/值对。

我用了你的json的一部分如下-

代码语言:javascript
复制
str1 = """{"gtin": "7617014161936","timePeriods": [{"fractionData": {"principalBody": {"constituents": [{"coatings": [
                {
                  "materialType": {
                    "value": "003",
                    "valueRange": "405"
                  },
                  "percentage": 0.1
                }
             ]}]}}}]}"""
代码语言:javascript
复制
import json

res = json.loads(str1)

res_dict = res['timePeriods'][0]['fractionData']['principalBody']['constituents'][0]['coatings'][0]['materialType']

df = spark.createDataFrame(data=res_dict.items())

输出:

代码语言:javascript
复制
+----------+---+
|        _1| _2|
+----------+---+
|     value|003|
|valueRange|405|
+----------+---+

您甚至可以指定架构:

代码语言:javascript
复制
from pyspark.sql.types import *

df = spark.createDataFrame(res_dict.items(), 
                      schema=StructType(fields=[
                          StructField("key", StringType()), 
                          StructField("value", StringType())])).show()

导致

代码语言:javascript
复制
+----------+-----+
|       key|value|
+----------+-----+
|     value|  003|
|valueRange|  405|
+----------+-----+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71321118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档