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



我试图将Spark数据框保存到谷歌云存储。我们可以将数据帧以拼花格式保存到S3,但由于我们的服务器是Google Compute Engine,因此将有巨大的数据传输到S3的成本。我想如果有可能有类似的功能为谷歌云存储?下面是我在S3的情况下所做的:

Add dependencies to build.sbt:

"net.java.dev.jets3t" % "jets3t" % "0.9.4",
"com.amazonaws" % "aws-java-sdk" % "1.10.16"

在主代码中使用:

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

最后,使用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

我试着在网上找一个类似的指南,但似乎没有一个?谁能告诉我怎么做呢?

谢谢。

如果有人想做同样的事情,我得到这个工作如下:

添加库依赖到SBT:

"com.google.cloud.bigdataoss" % "gcs-connector" % "1.4.2-hadoop2"

设置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"))

然后可以像S3那样保存和读取文件。唯一的问题是,在我测试时,它不能与Spark 1.4一起工作,所以您可能需要将其更新为Spark 1.5+。

相关内容

  • 没有找到相关文章

最新更新