【问题标题】:Save Spark dataframe as parquet file in Google Cloud Storage在 Google Cloud Storage 中将 Spark 数据帧另存为镶木地板文件
【发布时间】:2015-09-15 17:04:07
【问题描述】:

我正在尝试将 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"

在主代码中使用这个:

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

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

谢谢。

【问题讨论】:

    标签: scala apache-spark google-cloud-storage apache-spark-sql parquet


    【解决方案1】:

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

    将库依赖添加到 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+。

    【讨论】:

    • conf 应该是什么?
    • @BAR:这是来自 application.conf 的类型安全配置
    • 我知道这很明显它是一个外部配置,但无论如何你都应该指定它。
    • 它在 Spark 1.5 中对您有用吗?我问,因为我认为它只能在 1.3 和之前工作,因为 SparkHadoopUtil 忽略了“实时”hadoopConfiguration。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2023-02-13
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多