Pyspark使用json对象读取json,其中包含json列表在转换为数据帧时更改一些格式

2024-09-29 21:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下json对象列表:

[
  {
    "AccountId": "xxxx",
    "ResourceId": "yyyy",
    "ProductName": "zzzz",
    "Tags": [{"Name": "John Doe"}, {"Environment":"DEV"}]
  },
  {
    "AccountId": "aaaa",
    "ResourceId": "bbbb",
    "ProductName": "cccc",
    "Tags": [{"Name": "Jane Doe"}, {"Environment":"DEV"}]
  },
  {
    "AccountId": "iiii",
    "ResourceId": "jjjj",
    "ProductName": "kkkk",
    "Tags": [{"Environment":"QA"}]
  }
]

我尝试使用以下方法将其制作成数据帧:

ss = SparkSession.builder.appName("PythonSpark2").getOrCreate()
sc = ss.sparkContext

jsonList = someFunctionToCreate()
jsonDf = ss.read.json(sc.parallelize(jsonList))
jsonDf.show(truncate=False)

最终结果会弄乱“标签”列。数组中的json对象列表将被拆分为一个数组的数组,该数组的值为json值

|---------------------|------------------|---------------------|---------------------|
|      AccountId      |     ResourceId   |     ProductName     |         Tags        |
|---------------------|------------------|---------------------|---------------------|
|        xxxx         |       yyyy       |        zzzz         | [[JohnDoe,],[,DEV]] |
|---------------------|------------------|---------------------|---------------------|
|        aaaa         |       bbbb       |        cccc         | [[JaneDoe,],[,DEV]] |
|---------------------|------------------|---------------------|---------------------|
|        iiii         |       jjjj       |        kkkk         |     [[,],[,QA]]     |
|---------------------|------------------|---------------------|---------------------|

我有没有办法防止这种情况发生?还是我对json使用了一个糟糕的结构


Tags: 对象namedevjson列表environmenttags数组
1条回答
网友
1楼 · 发布于 2024-09-29 21:31:58

有一个函数只是将列转换为json,to_json

df = spark.read.option("header","true").option("inferSchema","true").json("test.json")
df.show(truncate=False)

df.withColumn('Tags', to_json('Tags')).show(truncate=False)

+    -+     -+     +                     -+
|AccountId|ProductName|ResourceId|Tags                                       |
+    -+     -+     +                     -+
|xxxx     |zzzz       |yyyy      |[{"Name":"John Doe"},{"Environment":"DEV"}]|
|aaaa     |cccc       |bbbb      |[{"Name":"Jane Doe"},{"Environment":"DEV"}]|
|iiii     |kkkk       |jjjj      |[{"Environment":"QA"}]                     |
+    -+     -+     +                     -+

相关问题 更多 >

    热门问题