【问题标题】:load a json file in databricks spark then iterate through the json list在databricks spark中加载一个json文件,然后遍历json列表
【发布时间】:2018-09-20 13:30:30
【问题描述】:

试图找出一种将 json 文件加载到 databricks spark 中的方法,将 json 放入字典中,然后遍历它。

现在我正在尝试使用sc.textFile() 来加载文件。

我的 json 文件如下所示:

{
    "tablename": "a",
    "tablename": "b",
    "tablename": "c",
       ...........
    "tablename": "z",
}

我想遍历json文件

我尝试过的事情:

data = json.load(open('data.json'))

没用

with open('data.json') as data_file:    
    data = json.load(data_file)

没用

感谢您的帮助

【问题讨论】:

  • 您是想将其读入 RDD 还是 spark DataFrame?

标签: python json apache-spark pyspark databricks


【解决方案1】:

我假设您的 json 实际上并不包含重复的键。如果是这样,这可能是您的解决方案不起作用的原因。

否则,以下代码片段会将 json 文件读入字典并在 Python 2.7 中对其进行迭代:

#! /usr/bin/python
# -*- coding: utf-8 -*-

import json

with open('stuff.json', 'r') as file_handler:
    result = json.load(file_handler)

print(result)  # {u'tablename1': u'b', u'tablename0': u'a', ...}
print(type(result))  # <type 'dict'>

for key, value in result.iteritems():
    print('key: %s // value: %s' % (key, value))  # key: tablename1 // value: b

Python 3.6 的代码略有不同:

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import json

with open('stuff.json', 'r') as file_handler:
    result = json.load(file_handler)

print(result)  # {u'tablename1': u'b', u'tablename0': u'a', ...}
print(type(result))  # <class 'dict'>

for key, value in result.items():
    print('key: %s // value: %s' % (key, value))  # key: tablename1 // value: b

【讨论】:

    【解决方案2】:

    最简单的答案是您忘记了代码中的.read() 方法

    使用带有信息的文件

    {
        "tablename1": "a",
        "tablename2": "b",
        "tablename3": "c",
        "tablename4": "z"
    }
    

    和代码

    json.loads(open('foo.json'))
    

    给出结果

    {u'tablename1': u'a',
     u'tablename2': u'b',
     u'tablename3': u'c',
     u'tablename4': u'z'}
    

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2021-02-13
      相关资源
      最近更新 更多