将 Spark 数据帧保存为 Google Cloud Storage 中的 parquet 文件

aux*_*xdx 5 scala google-cloud-storage apache-spark parquet apache-spark-sql

我正在尝试将 Spark 数据帧保存到 Google Cloud Storage。我们可以将 parquet 格式的数据帧保存到 S3,但由于我们的服务器是 Google Compute Engine,因此到 S3 的数据传输成本会很高。我想知道谷歌云存储是否可以有类似的功能?以下是我在 S3 中所做的操作:

添加依赖到build.sbt:

"net.java.dev.jets3t" % "jets3t" % "0.9.4",
"com.amazonaws" % "aws-java-sdk" % "1.10.16"
Run Code Online (Sandbox Code Playgroud)

在主代码中使用它:

val sc = new SparkContext(sparkConf)
sc.hadoopConfiguration.set("fs.s3a.awsAccessKeyId", conf.getString("s3.awsAccessKeyId"))
sc.hadoopConfiguration.set("fs.s3a.awsSecretAccessKey", conf.getString("s3.awsSecretAccessKey"))

val df = sqlContext.read.parquet("s3a://.../*") //read file
df.write.mode(SaveMode.Append).parquet(s3FileName) //write file
Run Code Online (Sandbox Code Playgroud)

最后,将其与 Spark-Submit 一起使用

spark-submit --conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3native.NativeS3FileSystem 
--conf spark.hadoop.fs.s3.impl=org.apache.hadoop.fs.s3.S3FileSystem
Run Code Online (Sandbox Code Playgroud)

我试图在互联网上寻找类似的指南,但似乎没有?任何人都可以建议我如何完成它吗?

谢谢。

aux*_*xdx 2

如果有人想做同样的事情,我的工作方式如下:

添加对 SBT 的库依赖:

"com.google.cloud.bigdataoss" % "gcs-connector" % "1.4.2-hadoop2"
Run Code Online (Sandbox Code Playgroud)

设置 Hadoop 配置:

sc.hadoopConfiguration.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
sc.hadoopConfiguration.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")
sc.hadoopConfiguration.set("fs.gs.project.id", conf.getString("gcs.projectId"))
sc.hadoopConfiguration.set("google.cloud.auth.service.account.enable", "true")
sc.hadoopConfiguration.set("google.cloud.auth.service.account.email", conf.getString("gcs.serviceAccountEmail"))
sc.hadoopConfiguration.set("google.cloud.auth.service.account.keyfile", conf.getString("gcs.serviceAccountKeyFile"))
Run Code Online (Sandbox Code Playgroud)

然后您可以像 S3 一样保存和读取文件。唯一的问题是,我测试时它无法与 Spark 1.4 配合使用,因此您可能需要将其更新到 Spark 1.5+。