9

高次元の寄木細工のファイルを読み込んでいますが、数列しか必要ありません。私の現在のコードは次のようになります。

dat = sqc.parquetFile(path) \
          .filter(lambda r: len(r.a)>0) \
          .map(lambda r: (r.a, r.b, r.c))

何が起こっているかについての私のメンタル モデルは、すべてのデータをロードしてから、不要な列を捨てているというものです。私は明らかに、それらのコラムを読まないことを望んでおり、寄木細工について理解していることから、それは可能であると思われます。

したがって、2 つの質問があります。

  1. 私のメンタルモデルは間違っていますか?または、spark コンパイラは、上記の例の列 a、b、および c のみを読み取るほどスマートですか?
  2. sqc.parquetFile()データをより効率的に読み込むにはどうすればよいですか?
4

3 に答える 3

5

Spark DataFrame API を使用する必要があります: https://spark.apache.org/docs/1.3.0/sql-programming-guide.html#dataframe-operations

何かのようなもの

dat.select("a", "b", "c").filter(lambda r: len(r.a)>0)

または、Spark SQL を使用できます。

dat.regiserTempTable("dat")
sqc.sql("select a, b, c from dat where length(a) > 0")
于 2015-05-21T07:45:35.313 に答える
0

はい、ディスクから選択されたフィールドのみになります。

" すべてのデータ ファイルを開きますが、その列の値を含む各ファイルの部分のみを読み取ります。列の値は連続して格納されるため、1 つの列内の値を処理するために必要な I/O が最小限に抑えられます。"

このドキュメントはインパラ用です。読み取りロジックはスパークでも同じだと思いますhttp://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_parquet.html#parquet_data_files_unique_1

于 2016-02-15T03:35:27.383 に答える