【问题标题】:How to use tabula in AWS Lambda to read PDF table如何在 AWS Lambda 中使用表格读取 PDF 表格
【发布时间】:2022-09-28 01:25:51
【问题描述】:

您好,我在尝试使用 tabula 读取 pdf 中的表格时收到以下错误。

我意识到将这个包与 AWS lambda 一起使用会遇到一些困难(here),并尝试通过 EC2(Ubuntu 20.02)压缩 tabula 包,然后将其作为层添加到函数中。

提前谢谢了!

{ \"errorMessage\": \"`java` command is not found from this Python process.Please ensure Java is installed and PATH is set for `java`\", \"errorType\": \"JavaNotFoundError\", \"stackTrace\": [ \" File \\\"/var/task/lambda_function.py\\\", line 39, in lambda_handler\\n df = tabula.read_pdf(BytesIO(fs), pages=\\\"all\\\", area = [box],\\n\", \" File \\\"/opt/python/lib/python3.8/site-packages/tabula/io.py\\\", line 420, in read_pdf\\n output = _run(java_options, tabula_options, path, encoding)\\n\", \" File \\\"/opt/python/lib/python3.8/site-packages/tabula/io.py\\\", line 98, in _run\\n raise JavaNotFoundError(JAVA_NOT_FOUND_ERROR)\\n\" ] }

代码

import boto3

import read_pdf from tabula
from io import BytesIO

def lambda_handler(event, context):
    
    client = boto3.client(\'s3\')
    
    s3 = boto3.resource(\'s3\')

    # Get most recent file name
    response = client.list_objects_v2(Bucket=\'S3bucket\')
    all = response[\'Contents\']        
    latest = max(all, key=lambda x: x[\'LastModified\'])
    latest_key = latest[\'Key\'] 
    
    # Get file
    obj = s3.Object(\'S3bucket\', latest_key)
    fs = obj.get()[\'Body\'].read()
    
    # Read PDF
    box = [3.99, .22, 8.3, 7.86]
    fc = 72
             
    for i in range(0, len(box)):
        box[i] *= fc
        
    df = tabula.read_pdf(BytesIO(fs), pages=\"all\", area = [box], output_format = \"dataframe\", lattice=True)

    标签: python aws-lambda tabula-py


    【解决方案1】:

    Tabula 的 python 包只是 java 代码的包装器。这是对包here 的引用。

    需要安装 Java 8+ 才能正常工作。实现这一目标的最佳选择是开发一个 docker 容器映像,您的脚本可以在其中运行,并将该映像部署为 lambda 函数。

    AWS 有一个很好的 walkthrough 可能会有所帮助。

    【讨论】:

      【解决方案2】:

      这是 ultimatley 工作的 Dockerfile,它允许我在我的 lambda 函数中运行 tabula:

      
      ARG FUNCTION_DIR="/var/task/"
      
      COPY ./ ${FUNCTION_DIR}
      
      # Install OpenJDK
      RUN yum install -y java-1.8.0-openjdk
      
      
      # Setup Python environment
      # Install PYTHON requirements
      COPY requirements.txt ./
      RUN pip install --no-cache-dir -r requirements.txt
      
      # Copy function code to container
      COPY app.py ./
      
      
      CMD [ "app.handler" ]
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多