【问题标题】:How to convert my textfile to a json file in python with duplicate key values如何将我的文本文件转换为 python 中具有重复键值的 json 文件
【发布时间】:2023-01-16 16:19:40
【问题描述】:

我正在解析我的应用程序日志并将其写入文本文件。然后我将此文本文件转换为 json 文件以在其上运行一些分析,但由于我得到的格式,我无法在 json 文件上创建表。

文本文件包含 6 行描述,之后有一个与键值对相似的模式。我想将每个具有不同 jobId 的对象归为一个,但无法这样做。我已经尝试了 defaultdict 方法,该方法给出了类似对象的列表,但这不是我的用例。我在这里附上了文本和 json 文件。可以相应地更改文本文件的格式。 这是文本文件 sn-p :

Report_for Reconciliation
Execution_of application_1673496470638_0001
Spark_version 2.4.7-amzn-0
Java_version 1.8.0_352 (Amazon.com Inc.)
Start_time 2023-01-12 09:45:13.360000
Job_ID 0
Submission_time 2023-01-12 09:47:20.148000
Run_time 73957ms
Result JobSucceeded
Number_of_stages 1
Stage parquet at RawDataPublisher.scala:53
Stage_ID 0
Number_of_tasks 16907
Number_of_executed_tasks 16907
Completion_time 73207ms
Stage_executed parquet at RawDataPublisher.scala:53
Job_ID 1
Submission_time 2023-01-12 09:48:34.177000
Run_time 11525ms
Result JobSucceeded
Number_of_stages 2
Stage parquet at RawDataPublisher.scala:53
Stage_ID 1
Number_of_tasks 16907
Number_of_executed_tasks 0
Completion_time 0ms
Stage_executed parquet at RawDataPublisher.scala:53
Stage parquet at RawDataPublisher.scala:53
Stage_ID 2
Number_of_tasks 300
Number_of_executed_tasks 300
Completion_time 11520ms
Stage_executed parquet at RawDataPublisher.scala:53
Job_ID 2
Submission_time 2023-01-12 09:48:46.908000
Run_time 218358ms
Result JobSucceeded
Number_of_stages 1
Stage parquet at RawDataPublisher.scala:53
Stage_ID 3
Number_of_tasks 1135
Number_of_executed_tasks 1135
Completion_time 218299ms
Stage_executed parquet at RawDataPublisher.scala:53

这是 json 文件 sn-p :

【问题讨论】:

  • 抱歉,我不明白预期的输出?你能解释一下或提供最终结果吗?

标签: python json apache-spark logging


【解决方案1】:

您提供的文本文件似乎包含具有不同作业 ID 的多个作业的日志信息。要将这些作业组合在一起,您可以使用 Python 脚本逐行读取文本文件,并为每个作业创建一个字典对象。您可以使用 'Job_ID' 作为每个字典的键,并将每个作业的相关信息添加为值。

以下是如何执行此操作的示例:

jobs = {}
with open("logs.txt", "r") as f:
    lines = f.readlines()
    for line in lines:
        if "Job_ID" in line:
            job_id = line.split()[-1]
            jobs[job_id] = {}
        else:
            key, value = line.split()[0], line.split()[-1]
            jobs[job_id][key] = value
print(jobs)

此脚本将逐行读取文本文件,并检查该行是否包含“Job_ID”。如果是,它将提取作业 ID 并使用作业 ID 作为键为该作业创建一个新的字典对象。如果该行不包含'Job_ID',它将从该行中提取键和值,并将其添加到当前作业的字典对象中。

生成的字典将 Job_ID 作为键,其余值作为值。

一旦你有了字典,你就可以使用 json.dump() 方法将它转换为 json 文件。

import json
with open('logs.json', 'w') as f:
    json.dump(jobs, f)

现在,您可以使用任何数据可视化工具(如 Tableau、PowerBI 等)在此 json 文件之上创建一个表。

【讨论】:

    猜你喜欢
    • 2020-05-13
    • 1970-01-01
    • 2019-07-06
    • 2016-03-08
    • 1970-01-01
    • 2020-11-24
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多