python - 在 Apache Spark 中读取 pretty-print json 文件

标签 python json apache-spark amazon-s3

我的 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"
}

这是我的问题-

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

  2. 如果没有,用 Python 实现它的最佳方法是什么?我的存储桶中每天都有一堆这样的文件。桶按天分区。

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

最佳答案

你可以使用 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()

关于python - 在 Apache Spark 中读取 pretty-print json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39453769/

相关文章:

Python:如何判断列表中的元素是否包含某个数字?

python - TypeError : Can't instantiate abstract class <. ..> 使用抽象方法

python - 如何在 Beautifulsoup 4 中检索包含特定文本的 href?

javascript - Json,获取另一个级别内的信息

javascript - 从 JSF 访问 Javascript 变量

python - 如何找到数值时间序列的多个最大值

java - Spark Java中计算中位数

apache-spark - 如何将 DataFrame 中的数据准备为 LibSVM 格式?

scala - 如何在没有 SQL 查询的情况下使用 Spark Dataframe 检查相等性?

python - 如何访问字典 python 中列表中的元素?