多くの列を持つ parquet ファイルから Spark の列のサブセットのみを読み取る最も効率的な方法は何ですか? を使用するのがspark.read.format("parquet").load(<parquet>).select(...col1, col2)
最善の方法ですか? また、ケース クラスを使用してタイプセーフ データセットを使用してスキーマを事前に定義することも好みますが、確信はありません。
ベストアンサー1
val df = spark.read.parquet("fs://path/file.parquet").select(...)
これにより、対応する列のみが読み取られます。実際、Parquet は列指向ストレージであり、まさにこのタイプの使用例向けです。実行してみるdf.explain
と、Spark は対応する列のみが読み取られたことを通知します (実行プランを出力します)。explain
また、where 条件も使用している場合は、どのフィルターが実行の物理プランにプッシュダウンされたかも通知します。最後に、次のコードを使用して、データフレーム (行のデータセット) をケース クラスのデータセットに変換します。
case class MyData...
val ds = df.as[MyData]