首页 > 解决方案 > 无法在来自 blobstorage 的先前数据帧中附加新数据帧

问题描述

在 HTTP 触发之后,我想从 blob 存储中读取 .csv 文件并将新数据附加到该文件中。并希望以 .csv 格式将数据保存到 blob 存储。请帮帮我......

    scriptpath=os.path.abspath(__file__)
    scriptdir=os.path.dirname(scriptpath)

    train=os.path.join(scriptdir,'train.csv')
    train_df=pd.read_csv(train)
    train_df=train_df.append(test_df)

    
    train_df.to_csv(scriptdir+'tt.csv')
    
    block_blob_service.create_blob_from_path(
        'files',
        'mytest.csv',
        scriptdir+'tt.csv',
        content_settings=ContentSettings(content_type='application/CSV')
                )  

我的问题是附加数据后,我必须将该数据保存到 blob 存储。因此,我必须将所有数据保存在 csv 文件中,但出现上述错误。Https 触发器不允许我保存 csv 文件。错误显示

Exception: PermissionError: [Errno 13] Permission denied: 

'C:\\Users\\Shiva\\Desktop\\project\\loumus\\Imagetrigger'
Stack:   File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.7/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 357, in _handle__invocation_request
    self.__run_sync_func, invocation_id, fi.func, args)
  File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\concurrent\futures\thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.7/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 542, in __run_sync_func
    return func(**params)
  File "C:\Users\Shiva\Desktop\project\loumus\Imagetrigger\__init__.py", line 276, in main
    mm.to_csv(scriptdir,'tt.csv')
  File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\generic.py", line 3403, in to_csv
    storage_options=storage_options,
  File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\formats\format.py", line 1083, in to_csv
    csv_formatter.save()
  File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\formats\csvs.py", line 234, in save
    storage_options=self.storage_options,
  File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\common.py", line 647, in get_handle
    newline="",

标签: pythonazure-functionsazure-web-app-serviceazure-blob-storage

解决方案


有几个问题。

  1. Azure Functions 在托管运行时环境中运行,您对本地存储/磁盘的访问权限与在笔记本电脑上运行时不同。不是说你没有本地磁盘。STW 和 RTM:
  2. 用于tempdir创建临时目录。这将在底层操作系统指定为临时存储的区域中创建它。
  3. 写入本地存储然后上传到 ADLS 没有具体原因。你可以:
    • 将 csv 文件写入内存(例如StringIO),然后使用 SDK 将其写入strADLS。
    • 安装适当的驱动程序(不确定您是否使用 pyspark 或 pandas 或其他东西)并直接将 Dataframe 写入 ADLS。例如看one example

推荐阅读