1. ホーム
  2. apache-spark

[解決済み] sparkで出力ディレクトリを上書きする方法

2022-07-19 09:41:49

質問

1分ごとにデータセットを生成するSparkストリーミングアプリケーションを持っています。 処理したデータの結果を保存/上書きする必要があります。

データセットを上書きしようとすると org.apache.hadoop.mapred.FileAlreadyExistsException で実行が止まってしまいます。

Sparkのプロパティである set("spark.files.overwrite","true") を設定しましたが、うまくいきません。

sparkからファイルを上書きまたはPredeleteする方法を教えてください。

どのように解決するのですか?

UPDATE: Dataframes を使用することを提案し、さらに以下のような ... .write.mode(SaveMode.Overwrite) ... .

便利なヒモ。

implicit class PimpedStringRDD(rdd: RDD[String]) {
    def write(p: String)(implicit ss: SparkSession): Unit = {
      import ss.implicits._
      rdd.toDF().as[String].write.mode(SaveMode.Overwrite).text(p)
    }
  }

古いバージョンでは

yourSparkConf.set("spark.hadoop.validateOutputSpecs", "false")
val sc = SparkContext(yourSparkConf)

1.1.0では、spark-submitスクリプトを使用して、--confフラグでconfの設定をすることができます。

警告(古いバージョン)。piggybox によると、Spark にはバグがあるそうです。 part- ファイルを書き込むために必要なファイルのみを上書きし、他のファイルは削除されずに残ります。