2017-06-15 1 views
1

docsからスパークのSQLデータフレームSpark:write.partitionByを呼び出すと、DataFrameWriterがパーティション列を削除しないようにする方法我々は法の下に使用している

public DataFrameWriter<T> partitionBy(scala.collection.Seq<String> colNames) 

を保存するには:

パーティションのファイルシステム上の任意の列で出力。 が指定されている場合、出力はHiveの パーティション方式と同様にファイルシステム上に配置されます。私たちは 年でデータセットを分割して、月のときの例としては、ディレクトリのレイアウトは次のようになります。
- 年= 2016 /月= 01/
を - 年= 2016 /月= 02/

我々のコードは次のようになります。

df.repartition(new Column("day")).write.partitionBy("day").mode(SaveMode.Overwrite).parquet(outputPath) 

我々は我々が期待してディレクトリレイアウトを取得し、私たちは、寄木細工のファイルは、もはやそれでday列を持っていない見つけます。寄木細工のファイルには日の列が必要です。どうすればこのことができますか?

答えて

0

最もよい解決策は、寄木細工ファイルにドロップされるデータフレームに重複する列を追加することですが、元のday列はそこに残ります。

0

一般に、モーフィアスの答えはきれいなクレーです。しかし...

厳密に読み書きしているのであれば、データを読むときにはbasePathオプションを使うことができます。

https://spark.apache.org/docs/2.2.0/sql-programming-guide.html#partition-discovery

SparkSession.read.parquet又はSparkSession.read.loadいずれか/テーブルに/パスを渡すことによって、SQLが自動的に経路から分割情報を抽出するスパーク。

例:

 val dataset = spark 
     .read 
     .format("parquet") 
     .option("basePath", hdfsInputBasePath) 
     .load(hdfsInputPath) 
関連する問題