在 Apache Spark 中读取漂亮的打印 json 文件

Posted

技术标签:

【中文标题】在 Apache Spark 中读取漂亮的打印 json 文件【英文标题】:Reading pretty print json files in Apache Spark 【发布时间】:2017-01-20 02:17:10 【问题描述】:

我的 S3 存储桶中有很多 json 文件,我希望能够读取它们并查询这些文件。问题是它们印得很漂亮。一个 json 文件只有一个庞大的字典,但它不在一行中。根据this 线程,json 文件中的字典应该在一行中,这是 Apache Spark 的限制。我没有这样安排。

我的 JSON 架构如下所示 -


    "dataset": [
        
            "key1": [
                
                    "range": "range1", 
                    "value": 0.0
                , 
                
                    "range": "range2", 
                    "value": 0.23
                
             ]
        , .., ..
    ],
    "last_refreshed_time": "2016/09/08 15:05:31"

这是我的问题 -

    我能否避免转换这些文件以匹配 Apache Spark 所需的架构(文件中每行一个字典)并且仍然能够读取它?

    如果不是,在 Python 中最好的方法是什么?我每天都有一堆这些文件在桶里。存储桶按天划分。

    除了 Apache Spark 之外,还有其他更适合查询这些文件的工具吗?我在 AWS 堆栈上,因此可以使用 Zeppelin 笔记本尝试任何其他建议的工具。

【问题讨论】:

我对 Spark 不熟悉,但如果你有 Python 可用,你可以使用 json 模块读取 JSON 文件,然后做你想做的事(包括将其写回而不用漂亮-打印)。 【参考方案1】:

您可以使用sc.wholeTextFiles() 这是一个相关的post。

或者,您可以使用一个简单的函数重新格式化您的 json 并加载生成的文件。

def reformat_json(input_path, output_path):
    with open(input_path, 'r') as handle:
        jarr = json.load(handle)

    f = open(output_path, 'w')
    for entry in jarr:
        f.write(json.dumps(entry)+"\n")
    f.close()

【讨论】:

以上是关于在 Apache Spark 中读取漂亮的打印 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 Apache Spark Streaming 从 RabbitMq 读取消息

复数的漂亮打印

如何在 apache spark 中读取最新的分区

在 Swift 中编写一个带有排序键的漂亮打印 JSON 对象

无法读取,稍后在 Apache Spark 中查询文本文件

在 Spark 中读取 Avro 文件