簡體   English   中英

如何將流數據寫入S3?

[英]How to write streaming data to S3?

我想使用 Scala 在 Spark Streaming 中將RDD[String]寫入 Amazon S3。 這些基本上是 JSON 字符串。 不知道如何更有效地做到這一點。 我找到了這篇文章,其中使用了庫spark-s3 這個想法是先創建SparkContext ,然后再創建SQLContext 在此之后,帖子的作者做了這樣的事情:

myDstream.foreachRDD { rdd =>
      rdd.toDF().write
                .format("com.knoldus.spark.s3")
                .option("accessKey","s3_access_key")
                .option("secretKey","s3_secret_key")
                .option("bucket","bucket_name")
                .option("fileType","json")
                .save("sample.json")
}

除了spark-s3之外還有哪些選擇? 是否可以流數據附加到 S3 上的文件?

無法附加S3 上的文件。 “追加”在 S3 中意味着用包含附加數據的新對象替換現有對象。

您應該在Spark 文檔中查看 dataframewriter 的模式方法:

public DataFrameWriter mode(SaveMode saveMode)

指定數據或表已存在時的行為。 選項包括: - SaveMode.Overwrite:覆蓋現有數據。 - SaveMode.Append:追加數據 - SaveMode.Ignore:忽略操作(即無操作)。 - SaveMode.ErrorIfExists:默認選項,在運行時拋出異常。

您可以使用Append savemode 嘗試類似的操作。

rdd.toDF.write
        .format("json")
        .mode(SaveMode.Append)
        .saveAsTextFile("s3://iiiii/ttttt.json");

火花附加:

Append 模式是指在將 DataFrame 保存到數據源時,如果數據/表已經存在,則希望將 DataFrame 的內容附加到現有數據中。

基本上,您可以通過將“格式”關鍵字傳遞給方法來選擇您想要的格式作為輸出格式

public DataFrameWriter format(java.lang.String source)

指定基礎輸出數據源。 內置選項包括“parquet”、“json”等。

例如作為parquet

df.write().format("parquet").save("yourfile.parquet")

或作為json

df.write().format("json").save("yourfile.json")


編輯:添加了有關 s3 憑據的詳細信息:

如何設置憑據有兩種不同的選項,我們可以在SparkHadoopUtil.scala使用環境變量System.getenv("AWS_ACCESS_KEY_ID")spark.hadoop.foo屬性看到這一點:

SparkHadoopUtil.scala:
if (key.startsWith("spark.hadoop.")) {
          hadoopConf.set(key.substring("spark.hadoop.".length), value)
}

所以,你需要得到hadoopConfigurationjavaSparkContext.hadoopConfiguration()scalaSparkContext.hadoopConfiguration和集

hadoopConfiguration.set("fs.s3.awsAccessKeyId", myAccessKey)
hadoopConfiguration.set("fs.s3.awsSecretAccessKey", mySecretKey)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM