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

GCP Dataproc集群初始化脚本配置Excel/Avro Jar及Jupyter调用咨询

解决GCP集群PySpark处理Excel和Avro的Jar包依赖问题

一、集群初始化脚本(cluster_startup.sh)及依赖信息

1. Maven依赖坐标(用于提前上传Jar到GCS)

  • Excel处理Jar:com.crealytics:spark-excel_2.12:0.13.0(Scala版本需与集群Spark版本匹配:Spark 3.x对应Scala 2.12,Spark 2.x对应Scala 2.11)
  • Avro处理Jar:org.apache.spark:spark-avro_2.12:3.1.2(需与集群Spark主版本一致,比如Spark 3.1.x用3.1.2)

2. cluster_startup.sh脚本内容

该脚本会将GCS上的Jar包下载到集群所有节点的Spark默认Jar目录,确保Spark自动加载:

#!/bin/bash
# 替换为你的GCS存储桶名称
BUCKET_NAME="your-bucket-name"

# 下载Excel Jar到Spark默认Jar目录
gsutil cp gs://${BUCKET_NAME}/spark-excel_2.12-0.13.0.jar /usr/lib/spark/jars/

# 下载Avro Jar到Spark默认Jar目录
gsutil cp gs://${BUCKET_NAME}/spark-avro_2.12-3.1.2.jar /usr/lib/spark/jars/

# 赋予Jar包可读权限(确保Spark能正常读取)
chmod 755 /usr/lib/spark/jars/spark-excel_2.12-0.13.0.jar
chmod 755 /usr/lib/spark/jars/spark-avro_2.12-3.1.2.jar

注意:需提前将对应版本的Jar包上传到指定GCS存储桶,Jar包文件名需与脚本中的一致(可从Maven仓库下载后上传)。

3. Terraform配置(沿用您的示例)

initialization_action {
  script      = "gs://bucket_name/cluster_startup.sh"
  timeout_sec = 500
}

二、PySpark Jupyter中的Jar包调用及存储位置说明

1. 修正后的PySpark代码

由于spark.jars参数需要传入逗号分隔的Jar路径字符串,且集群无法访问外部网络,需直接引用GCS上的Jar包路径:

bucket_name = "your-bucket-name"
# 文件名需与上传到GCS的Jar包一致
excel_jar = f"gs://{bucket_name}/spark-excel_2.12-0.13.0.jar"
avro_jar = f"gs://{bucket_name}/spark-avro_2.12-3.1.2.jar"

spark = SparkSession.builder \
    .appName("ExcelToAvro") \
    .config("spark.jars", f"{excel_jar},{avro_jar}") \
    .getOrCreate()

# 读取GCS上的Excel文件
df = spark.read.format("com.crealytics.spark.excel") \
    .option("useHeader", "true") \
    .option("inferSchema", "true") \
    .option("dataAddress", "'NameOfYourExcelSheet'!A1") \
    .load(f"gs://{bucket_name}/your_excel_file.xlsx")

# 写入Avro文件到GCS
df.write.format("avro").save(f"gs://{bucket_name}/output/test.avro")

说明:如果已经通过初始化脚本将Jar包放到/usr/lib/spark/jars/,则无需在SparkSession中配置spark.jars,Spark会自动加载这些Jar包。

2. Jar包的存储位置

  • 通过初始化脚本下载的Jar包:永久保存在集群每个节点的/usr/lib/spark/jars/目录下,直到集群被销毁。
  • 通过spark.jars指定GCS路径的Jar包:Spark会临时下载到每个节点的临时目录(如/tmp/spark-<随机字符串>/jars/),集群重启或任务结束后会被自动清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:26:06