我遇到了一个 Spark 代码,它在 GCP dataproc 上运行,向 GCS 读取和写入数据。该代码具有以下 Spark 配置。
spark_session.sparkContext._conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
spark_session.sparkContext._conf.set("spark.hadoop.fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
spark_session.sparkContext._conf.set("fs.gs.auth.service.account.enable", "true")
spark_session.sparkContext._conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")
spark_session.sparkContext._conf.set("fs.gs.project.id", "<val>")
spark_session.sparkContext._conf.set("fs.gs.auth.service.account.email", "<val>")
spark_session.sparkContext._conf.set("fs.gs.auth.service.account.private.key.id", "<val>"])
spark_session.sparkContext._conf.set("fs.gs.auth.service.account.private.key", "<val>")
问题:
GCS 配置是可选的。默认情况下,在 Dataproc 集群中,GCS 连接器使用虚拟机的服务帐户向 GCS 进行身份验证;但指定属性后,连接器将改用用户指定的服务帐户。请注意,
fs.gs.auth.service.account.enable
、fs.gs.auth.service.account.email
和其他一些身份验证属性仅在 GCS 连接器 v2 中可用,请参阅此 doc;在 v3 中,引入了一个新属性 fs.gs.auth.type
来显式指定身份验证类型,请参阅此 doc。
两者都可以用来配置 Spark 属性,但是 SparkContext 从一开始就被引入了,Spark Session 是在 Spark 2.0 中引入的,作为早期 Spark Context 和 SQL Context API 的替代品。所以SparkSession是首选。