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

vsdwdz23  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(170)

我正在使用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对象并遍历键和它们的值。

5n0oy7gb

5n0oy7gb1#

技巧是对文件URL使用以下语法

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

我不得不添加/dbfs/...分别替换dbfs://dbfs/在URL的开头.
那我就可以

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

    jsonObject = json.loads(data)

也许更容易些,但现在还可以.

ffvjumwh

ffvjumwh2#

要保持JSON样式并专门处理JSON格式的数据,您可以尝试使用以下代码加载数据:

df = json.loads(dbutils.fs.head(fi.path))

检查键值对的计数:

print(len(df))

然后遍历key:values:

for obj in df:
  email = df['email']
  print(email)

希望这能帮上忙。

相关问题