我正在尝试创建一个计时器触发器 azure 函数,该函数从 blob 获取数据,聚合数据,并将聚合结果放入 cosmosDB 中。我之前尝试使用 azure 函数中的绑定来使用 blob 作为输入,但我被告知这是不正确的(请参阅此线程:Azure 函数 python 命名参数没有值 https://stackoverflow.com/questions/47437077/azure-functions-python-no-value-for-named-parameter).
我现在使用SDK时遇到了以下问题:
import sys, os.path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), 'myenv/Lib/site-packages')))
import json
import pandas as pd
from azure.storage.blob import BlockBlobService
data = BlockBlobService(account_name='accountname', account_key='accountkey')
container_name = ('container')
generator = data.list_blobs(container_name)
for blob in generator:
print("{}".format(blob.name))
json = json.loads(data.get_blob_to_text('container', open(blob.name)))
df = pd.io.json.json_normalize(json)
print(df)
这会导致错误:
IOError: [Errno 2] No such file or directory: 'test.json'
我意识到这可能是绝对路径问题,但我不确定它如何与天蓝色存储一起使用。关于如何规避这个问题有什么想法吗?
通过执行以下操作使其“起作用”:
for blob in generator:
loader = data.get_blob_to_text('kvaedevdystreamanablob',blob.name,if_modified_since=delta)
json = json.loads(loader.content)
这适用于一个 json 文件,即我的存储中只有一个,但是当添加更多文件时,我会收到此错误:
ValueError: Expecting object: line 1 column 21907 (char 21906)
即使我添加也会发生这种情况if_modified_since
只接受一团。如果我弄清楚了什么,就会更新。随时欢迎帮助。
另一个更新:我的数据通过流分析进入,然后深入到 blob。我选择数据应以数组形式输入,这就是发生错误的原因。当流终止时,blob 不会立即追加]
到 json 中的 EOF 行,因此 json 文件无效。现在将尝试在流分析中使用逐行而不是数组。