You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter中导入.xlsx文件并通过SQL操作失败的求助

Jupyter中导入.xlsx文件并通过SQL操作失败的求助

大家好,我最近尝试在Jupyter中导入Database.xlsx文件,想用SQL命令来操作它,但运行代码后遇到了AttributeError,实在搞不定,想请大家帮忙分析一下问题所在。

我使用的代码如下:

!pip install pandas==1.3.3

import pandas as pd
from pyspark.sql import SparkSession

# Initialize Spark session with Arrow disabled
spark = SparkSession.builder \
    .appName("ExcelToSpark") \
    .config("spark.sql.execution.arrow.pyspark.enabled", "false") \
    .getOrCreate()

# Read the Excel file using Pandas
pdf = pd.read_excel('/home/jovyan/Database.xlsx', sheet_name='DB')

# Convert Pandas DataFrame to PySpark DataFrame
sdf = spark.createDataFrame(pdf)
sdf.createOrReplaceTempView('DB')

运行后出现的错误信息:

AttributeError Traceback (most recent call last)
/tmp/ipykernel_222/4258738796.py in ?()
10 # Read the Excel file using Pandas
11 pdf = pd.read_excel('/home/jovyan/Database.xlsx', sheet_name='DB')
12
13 # Convert Pandas DataFrame to PySpark DataFrame
---> 14 sdf = spark.createDataFrame(pdf)


可能的原因及解决办法

作为经常处理这类问题的开发者,我整理了几个大概率能解决问题的方向:

  1. 缺少Excel读取依赖库
    Pandas读取.xlsx文件需要依赖openpyxl库,如果你没安装的话,可能会在读取时出问题(虽然报错显示在转换步骤,但读取环节的隐性问题也可能传导过来)。先安装这个库试试:

    !pip install openpyxl
    
  2. Pandas与PySpark版本不兼容
    你指定安装了pandas==1.3.3,但这个版本可能和你当前使用的PySpark版本不匹配,导致spark.createDataFrame()无法正常解析Pandas DataFrame。先查看你的PySpark版本:

    import pyspark
    print(pyspark.__version__)
    

    然后根据PySpark官方文档推荐的版本对应关系,调整Pandas的安装版本。比如PySpark 3.2.x推荐Pandas 1.0.0~1.4.x,PySpark 3.3.x则支持到Pandas 1.5.x。

  3. 直接使用PySpark读取Excel(更稳定)
    其实不需要通过Pandas中转,直接用PySpark的专用Excel读取库会更可靠,还能避免版本兼容问题。步骤如下:

    • 先安装依赖库:
      !pip install spark-excel
      
    • 修改代码为:
      from pyspark.sql import SparkSession
      
      spark = SparkSession.builder \
          .appName("ExcelToSpark") \
          .config("spark.sql.execution.arrow.pyspark.enabled", "false") \
          .getOrCreate()
      
      # 直接读取Excel为PySpark DataFrame
      sdf = spark.read.format("com.crealytics.spark.excel") \
          .option("header", "true")  # 如果Excel有表头的话开启
          .option("sheetName", "DB") \
          .load("/home/jovyan/Database.xlsx")
      
      sdf.createOrReplaceTempView('DB')
      

    这样直接得到的PySpark DataFrame可以直接用于SQL操作,不需要转换环节。

  4. 验证文件路径和工作表名称
    最后再确认一下:/home/jovyan/Database.xlsx这个路径是否正确,工作表名称DB是否完全匹配(注意大小写敏感),文件有没有损坏或者权限问题。


备注:内容来源于stack exchange,提问作者Fabrizio Ferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:28:19