从Excel导出哪些格式可被AWS Glue正确爬取并解析?
解决Excel导出文件与AWS Glue爬虫兼容问题的可行格式
我完全懂你的无语——Excel这么普及的工具,和AWS Glue的兼容性居然这么拉胯,确实让人摸不着头脑😂。除了手动转UTF-8文本之外,还有几种导出格式能让Glue爬虫正确识别并解析,给你整理一下:
1. UTF-8编码的CSV(最直接的方案)
其实不用手动编辑每个文件,Excel本身就支持导出UTF-8编码的CSV:
- 打开Excel文件,选择「文件」→「另存为」
- 在「保存类型」里选择**「CSV UTF-8(逗号分隔)(*.csv)」**
- 保存后上传到S3,Glue的内置CSV分类器就能正确识别编码和格式,爬虫会自动分类,不会出现乱码或识别失败的问题。
这是最省心的方案,因为CSV是Glue原生支持的格式,而且导出步骤简单,不需要额外工具。
2. Parquet格式(高效且原生支持)
Parquet是一种列存格式,Glue对它的支持非常好,自带分类器,而且文件体积小、处理效率高。Excel本身不能直接导出Parquet,但可以用简单的脚本批量处理:
- 用Python的pandas库批量转换:
import pandas as pd import os # 遍历文件夹里的Excel文件 for file in os.listdir("./your-excel-files/"): if file.endswith(".xlsx") or file.endswith(".xls"): df = pd.read_excel(f"./your-excel-files/{file}") # 导出为Parquet df.to_parquet(f"./parquet-files/{file.replace('.xlsx', '.parquet')}")
- 把转换后的Parquet文件上传到S3,Glue爬虫会自动识别并创建对应的表结构,后续Glue Job处理起来也会更高效。
3. JSON格式(兼容性强)
Excel 2016及以上版本可以通过Power Query导出JSON,或者用VBA脚本批量导出:
- 打开Excel文件,用Power Query加载数据(「数据」→「从表格/区域」)
- 在Power Query编辑器里,选择「文件」→「导出」→「JSON」
- 上传到S3后,Glue的内置JSON分类器能正确识别,爬虫可以正常解析表结构。
不过JSON的文件体积会比Parquet大,处理效率稍低,但胜在导出步骤不需要额外代码,适合少量文件的场景。
额外技巧:直接在Glue Job里读取Excel文件(不用爬虫分类)
如果不想转换文件格式,也可以绕过Glue爬虫,直接在Glue Job里用Spark的Excel库读取xlsx/xls文件:
- 在Glue Job的脚本里添加依赖和读取逻辑:
from pyspark.sql import SparkSession # 初始化SparkSession,加载Excel依赖包 spark = SparkSession.builder \ .config("spark.jars.packages", "com.crealytics:spark-excel_2.12:0.14.0") \ .getOrCreate() # 读取S3上的Excel文件 df = spark.read.format("com.crealytics.spark.excel") \ .option("header", "true") # 第一行是表头 .option("inferSchema", "true") # 自动推断字段类型 .load("s3://your-bucket/path/*.xlsx") # 写入Aurora RDS df.write.format("jdbc") \ .option("url", "jdbc:mysql://your-aurora-endpoint:3306/your-database") \ .option("dbtable", "your-target-table") \ .option("user", "your-db-user") \ .option("password", "your-db-password") \ .mode("append") # 根据需求选append/overwrite等模式 .save()
这种方式不需要爬虫先分类,直接在Job里处理原始Excel文件,适合不想修改文件格式的场景。
总的来说,优先推荐UTF-8 CSV或Parquet,这两种格式Glue原生支持最好,爬虫能完美识别,处理效率也高。
内容的提问来源于stack exchange,提问作者BeardySam
相关产品推荐
相关产品推荐

