我正在开发一个项目,使用 PySpark 从 API 中提取数据并将其保存到 Azure Data Lake Gen 2 中的文件中。是的,我知道这应该很简单,而且我在提取数据时没有遇到任何问题,但是我花了很长时间才弄清楚收到它后如何处理它。
我的流程如下:
workspace_query = {'format': 'json'}
response = requests.get("https://api.mavenlink.com/api/v1/workspaces", headers={'Authorization': <some things InfoSec would appreciate that I didn't put in a public forum>}, params=workspace_query)
json_response = response.json()
kantata_json_data = json.dumps(json_response, indent=4, sort_keys=True)
好吧,如果我愿意的话,我可以从这里打印 kantata_json_dumps 的内容(如果我没有在公共(public)论坛上发布,InfoSec 也会感激其详细信息),并且所有内容看起来都像 JSON。耶。
我从这里无法弄清楚如何将该变量的内容成功写入文件。具体来说,如果我尝试写作,我会得到以下内容:
with open("https://p4syndev.dfs.core.windows.net/<Auzre subscription stuff>/<my foldername>/", "w") as file:
outfile.write(kantata_json_data)
然后出现错误:
FileNotFoundError Traceback (most recent call last)
Cell In [23], line 1
----> 1 with open("https://p4syndev.dfs.core.windows.net/<Auzre subscription stuff>/<my foldername>/", "w") as file:
2 outfile.write(kantata_json_data)
File ~/cluster-env/env/lib/python3.10/site-packages/IPython/core/interactiveshell.py:282, in _modified_open(file, *args, **kwargs)
275 if file in {0, 1, 2}:
276 raise ValueError(
277 f"IPython won't let you open fd={file} by default "
278 "as it is likely to crash IPython. If you know what you are doing, "
279 "you can use builtins' open."
280 )
--> 282 return io_open(file, *args, **kwargs)
这很令人困惑,因为我假设我能够使用 URL 或 ABFSS 路径写入文件夹,但两者都出现相同的错误。我是 Azure 的新手,这里绝对可能缺少一些 secret 武器。
因此,我尝试写入数据帧,然后将其转换为 JSON(坦率地说,这似乎不符合 Python 标准,但无论如何)并收到了 IllegalArgumentException。
任何关于我应该如何处理这个问题的想法都值得赞赏。
最佳答案
这是我的 json 数据。
您可以使用下面的代码来编写。
import pandas as pd
df = pd.DataFrame(json.loads(json_data))
df.to_json('abfs://dats/output/json_files/user.json', storage_options = {'linked_service' : 'AzureDataLakeStorage1'})
输出:
在这里,我正在创建 pandas 数据帧,使用 abfs 协议(protocol)将其写入存储帐户。
您可以使用以下任意一种路径。
abfs://<container_name>/<path_to_file>
或者
abfs://container_name@Storage_account.dfs.core.windows.net/path_to_file
并且您的突触工作区中将默认链接服务。在存储选项中指定该名称,或者如果您创建了链接服务,则使用该名称。
您不能使用此类协议(protocol)通过open函数访问文件,因为它会在本地文件系统(即您附加的池)中搜索文件。
关于python - 将 Json 数据写入 Azure Synapse PySpark Notebook 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76510602/