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

如何将Google Sheets数据导入PySpark DataFrame(无需下载或Pandas)

直接将Google Sheets数据导入PySpark DataFrame的方案

关于spark-google-spreadsheets库的可用性

这个Scala库可以在PySpark中使用,但你的代码存在配置和写法问题导致无法运行,具体问题及修正方案如下:

原代码中的问题

  1. 配置项名称错误:spark.executorENV.GOOGLE_APPLICATION_CREDENTIALS里的ENV需改为Env(Spark配置项大小写敏感),同时本地路径要补全根路径前缀,比如/home/pathtocreds.json
  2. 未保存SparkSession实例:创建会话后未赋值给spark变量,后续调用spark.read会报变量未定义错误
  3. 未指定数据源格式:读取数据时必须明确指定该库的格式类名,不能直接用load方法传入ID

修正后的代码示例

import pyspark
from pyspark.sql import SparkSession

# 创建SparkSession并配置依赖与凭证
spark = SparkSession.builder \
    .appName('Practise') \
    .config("spark.jars.packages", "com.github.potix2:spark-google-spreadsheets_2.12:0.2.0") \
    .config("spark.executorEnv.GOOGLE_APPLICATION_CREDENTIALS", "/home/pathtocreds.json") \
    .getOrCreate()

# 读取Google Sheets数据
df = spark.read \
    .format("com.github.potix2.spark.google.spreadsheets") \
    .option("spreadsheetId", "你的Google Sheet ID") \
    .option("sheetName", "worksheet0") \
    .load()

df.show()

替代方案(无需第三方库)

如果不想依赖该Scala库,可通过Google Sheets API直接拉取数据,转为RDD后生成DataFrame:

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

# 初始化SparkSession
spark = SparkSession.builder.appName('Practise').getOrCreate()

# 配置Google Sheets API权限
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
SERVICE_ACCOUNT_FILE = '/home/pathtocreds.json'
SPREADSHEET_ID = '你的Google Sheet ID'
RANGE_NAME = 'worksheet0!A:Z'

credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT_FILE, SCOPES)
service = build('sheets', 'v4', credentials=credentials)

# 拉取Sheet数据
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute()
values = result.get('values', [])

# 定义Schema(假设第一行是表头)
schema = StructType([StructField(col, StringType(), True) for col in values[0]])
# 跳过表头生成RDD,转为DataFrame
rdd = spark.sparkContext.parallelize(values[1:])
df = spark.createDataFrame(rdd, schema)

df.show()

核心注意事项

  • 服务账号需获得目标Sheet的访问权限:在Sheet共享设置中添加服务账号的邮箱地址
  • 依赖版本需匹配:spark-google-spreadsheets的Scala版本要与你的Spark版本对应(如Spark 3.x对应2.12版本的库)
  • 凭证路径需合法:确保Spark集群节点能访问到凭证文件路径,本地模式下路径要绝对正确

内容的提问来源于stack exchange,提问作者Jorge Pacheco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:17:51