web-dev-qa-db-ja.com

spark最初のn行にアクセス-テイクvsリミット

sparkデータフレームの最初の100行にアクセスし、結果をCSVファイルに書き戻したい。

なぜtake(100)は基本的にインスタントなのに対し、

df.limit(100)
      .repartition(1)
      .write
      .mode(SaveMode.Overwrite)
      .option("header", true)
      .option("delimiter", ";")
      .csv("myPath")

永遠にかかります。パーティションごとに最初の100レコードを取得するのではなく、100レコードだけを取得します。

14
Georg Heiler

これは、述語プッシュダウンが現在Sparkでサポートされていないためです これは非常に良い答え を参照してください。

実際、take(n)にも非常に長い時間がかかるはずです。ただし、テストしたところ、同じ結果が得られました。データベースのサイズに関係なく、テイクはほとんど瞬時に発生しますが、制限には多くの時間がかかります。

4
Thomas