Azure / Azure/azure-functions-python-worker

InputStream object cannot be used with pandas

Đang mở
#832 4 bình luận 1 reaction 1 người được giao Được @vrdmr nhận Xem trên GitHub
area:python-functions new feature
Ngôn ngữ chính
Python
Star
357
Fork
116
Merge trung bình
32 phút
Pull request đã merge (30 ngày)
1

Mô tả

In this example:

```python
import logging
import os
from azure.cosmosdb.table.tableservice import TableService
import azure.functions as func
import pandas

def main(myblob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {myblob.name}\n"
f"Blob Size: {myblob.length} bytes")
df = pandas.read_excel(myblob, index_col=0)

table_service = TableService(account_name=os.getenv('TABLE_STORAGE_ACCOUNT_NAME'),
account_key=os.getenv('TABLE_STORAGE_KEY'))

records = df.to_dict(orient="records") 
for record in records:
table_service.insert_entity('ais', record)
```

Configured with function.json as:

```json
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myblob",
"type": "blobTrigger",
"direction": "in",
"path": "ais/{name}.xlsx",
"connection": "anthonyshawstorage_STORAGE"
}
]
}
```

The script fails because `InputStream` does not implement the seek function. It _does_ implement `seakable()` as returning false, which is correct, but pandas doesn't adhere to that API so you get this error:

```default
Exception while executing function: Functions.BlobTrigger Result: Failure
Exception: UnsupportedOperation: seek
Stack: File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure_functions_worker/dispatcher.py", line 355, in _handle__invocation_request
call_result = await self._loop.run_in_executor(
File "/usr/local/lib/python3.9/concurrent/futures/thread.py", line 52, in run
result = self.fn(*self.args, **self.kwargs)
File "/azure-functions-host/workers/python/3.9/LINUX/X64/azure_functions_worker/dispatcher.py", line 542, in __run_sync_func
return func(**params)
File "/home/site/wwwroot/BlobTrigger/__init__.py", line 13, in main
df = pandas.read_excel(myblob, index_col=0)
File "/home/site/wwwroot/.python_packages/lib/site-packages/pandas/util/_decorators.py", line 299, in wrapper
return func(*args, **kwargs)
File "/home/site/wwwroot/.python_packages/lib/site-packages/pandas/io/excel/_base.py", line 336, in read_excel
io = ExcelFile(io, storage_options=storage_options, engine=engine)
File "/home/site/wwwroot/.python_packages/lib/site-packages/pandas/io/excel/_base.py", line 1057, in __init__
ext = inspect_excel_format(
File "/home/site/wwwroot/.python_packages/lib/site-packages/pandas/io/excel/_base.py", line 942, in inspect_excel_format
stream.seek(0)
```

Technically, this is a bug in pandas, because it should check `seekable()` first.

Is there a way to make the inputstream seekable if it comes from blob storage?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.