如何从Azure Data Lake Store中读取Azure Databricks中的JSON文件

时间:2018-08-26 18:25:31

标签: python json azure databricks

我正在使用Azure Data Lake Store存储具有以下JSON的简单JSON文件:

{
  "email": "Usersemail@domain.com",
  "id": "823956724385"
}

json文件名为myJson1.json。 Azure Data Lake Store已成功安装到Azure Databricks。

我能够通过

成功加载JSON文件
df = spark.read.option("multiline", "true").json(fi.path)

fi.path是一个FileInfo对象,是上方的MyJson1.json文件。

当我这样做

spark.read.option("multiline", "true").json(fi.path)
df.show()` 

我将JSON对象正确打印为(DataFrame),

+---------------------+------------+
|                email|          id|
+---------------------+------------+
|Usersemail@domain.com|823956724385|
+---------------------+------------+

我想做的是,用json.load(filename)加载JSON文件,以便能够在Python中使用JSON对象。

当我这样做

with open('adl://.../myJson1.json', 'r') as file:
  jsonObject0 = json.load(file)

然后我得到以下错误

  

[Errno 2]没有这样的文件或目录'adl://.../myJson1.json'

当我尝试时(挂载点正确,我可以列出文件,也可以将spark.read读入DataFrame)

    jsonObject = json.load("/mnt/adls/data/myJson1.json")

然后我得到以下错误

  

'str'对象没有属性'read'

我不知道该怎么做才能加载JSON。我的目标是读取JSON对象并遍历键及其值。

1 个答案:

答案 0 :(得分:3)

诀窍是对文件url使用以下语法

/dbfs/mnt/adls/data/myJson1.json

我必须在网址开头添加/dbfs/...,并用dbfs:/替换/dbfs/

然后我可以使用

    with open('/dbfs/mnt/adls/ingress/marketo/update/leads/leads-json1.json', 'r') as f:
      data = f.read()

    jsonObject = json.loads(data)

也许更容易吗?但这暂时有效。