df.write.parquet(destination)
を呼び出した場合、DataFrameスキーマ(つまりStructType
情報)がデータとともに保存されていますか?寄せ集め形式を使用すると、DataFrameスキーマが保存されますか?
ParquetファイルがSpark以外の他のプログラムによって生成された場合、sqlContext.read.parquet
はどのようにDataFrameのスキーマを把握しますか?
df.write.parquet(destination)
を呼び出した場合、DataFrameスキーマ(つまりStructType
情報)がデータとともに保存されていますか?寄せ集め形式を使用すると、DataFrameスキーマが保存されますか?
ParquetファイルがSpark以外の他のプログラムによって生成された場合、sqlContext.read.parquet
はどのようにDataFrameのスキーマを把握しますか?
Parquetファイルは保存時に元のデータのスキーマを自動的に保存します。 Sparkや他のシステムがデータの書き込み/読み取りを行う場合、違いはありません。
一つまたは複数の列を保存するときにデータを分割するために使用された場合(情報がファイル構造に格納されているので)、これらの列のデータ型が失われます。これらのデータ型は、読み込み時にSparkによって自動的に推論されます(現在、数値データ型と文字列のみがサポートされています)。
この自動推論は、spark.sql.sources.partitionColumnTypeInference.enabled
をfalseに設定することでオフにすることができます。これにより、これらの列は文字列として読み取られます。詳細はhereを参照してください。