AWS GLUE 导入 xls/xlsx 文件

AWS GLUE import xls/xlsx file

我正在为我的客户设置 AWS GLUE 作业。他们的文件是 excel,扩展名为 xls/xlsx,并且有多张纸,他们不想在上传前做任何转换工作。如何直接从 xls/xlsx 文件中提取数据,或者 GLUE 能否将 xls/xlsx 文件转换为 csv 文件?

xls/xlsx 文件类型目前不可用。您需要编写转换器脚本将文件从 xls/xlsx 转换为 CSV。

Classifier API

GLUE 目前不支持

xls/xlsx。最简单的方法是在 glue 中编写一个 python shell 作业,将 excel 转换为 csv,然后 运行 对其进行爬虫。下面是 sample 在 python

 import xlrd
 import csv

 def csv_from_excel():

    wb = xlrd.open_workbook('your_workbook.xls')
    sh = wb.sheet_by_name('Sheet1')
    your_csv_file = open('your_csv_file.csv', 'wb')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)

    for rownum in xrange(sh.nrows):
        wr.writerow(sh.row_values(rownum))

    your_csv_file.close()

Excel 可以在 glue 版本 2 中读取,而不是在 glue 版本 3 中读取。

步骤:

  1. 转到粘合作业并使用以下代码编辑脚本

代码:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import pandas as pd

args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)


excel_path= r"s3://input/employee.xlsx"
df_xl_op = pd.read_excel(excel_path,sheet_name = "Sheet1")
df=df_xl_op.applymap(str)
input_df = spark.createDataFrame(df)
input_df.printSchema()

job.commit()
  1. 保存脚本

  2. 转到操作 - 编辑作业 - Select 粘贴版本 2 并在安全配置下设置密钥值

    键:--additional-python-modules
    值:pandas==1.2.4,xlrd==1.2.0,numpy==1.20.1,fsspec==0.7.4

  3. 保存并运行作业

它将解决您的错误,您将能够阅读 excel 文件