web-dev-qa-db-ja.com

Rの寄木張りを読み取り、R DataFrameに変換するにはどうすればよいですか?

Rプログラミング言語で Apache Parquet ファイル(私の場合はSparkで生成)を処理したいと思います。

Rリーダーは利用可能ですか?または、1つで作業が行われていますか?

そうでない場合、そこに到達するための最も適切な方法は何でしょうか?注:JavaおよびC++バインディング: https://github.com/Apache/parquet-mr

27
metasim

これにはarrowパッケージを使用できます。 Python pyarrowと同じことですが、最近ではPythonを必要とせずにR向けにパッケージ化されています。CRANではまだ利用できないため、手動で行う必要がありますまずArrow C++をインストールします。

git clone https://github.com/Apache/arrow.git
cd arrow/cpp && mkdir release && cd release

# It is important to statically link to boost libraries
cmake .. -DARROW_PARQUET=ON -DCMAKE_BUILD_TYPE=Release -DARROW_BOOST_USE_SHARED:BOOL=Off
make install

次に、R arrowパッケージをインストールできます。

devtools::install_github("Apache/arrow/r")

そして、それを使用してParquetファイルをロードします

library(arrow)
#> 
#> Attaching package: 'arrow'
#> The following object is masked from 'package:utils':
#> 
#>     timestamp
#> The following objects are masked from 'package:base':
#> 
#>     array, table
read_parquet("somefile.parquet", as_tibble = TRUE)
#> # A tibble: 10 x 2
#>        x       y
#>    <int>   <dbl>
#> …
8
Uwe L. Korn

Spark=を使用している場合、これはSpark 1.4のリリースで比較的簡単になりました。 Apache Spark=コアフレームワーク。

# install the SparkR package
devtools::install_github('Apache/spark', ref='master', subdir='R/pkg')

# load the SparkR package
library('SparkR')

# initialize sparkContext which starts a new Spark session
sc <- sparkR.init(master="local")

# initialize sqlContext
sq <- sparkRSQL.init(sc)

# load parquet file into a Spark data frame and coerce into R data frame
df <- collect(parquetFile(sq, "/path/to/filename"))

# terminate Spark session
sparkR.stop()

展開された例を@ https://Gist.github.com/andyjudson/6aeff07bbe7e65edc665

Sparkを使用していない場合に使用できる他のパッケージは知りません。

27
Andy Judson

SparkRの代わりに、sparklyrを使用できます。

# install.packages("sparklyr")
library(sparklyr)

sc <- spark_connect(master = "local")

spark_tbl_handle <- spark_read_parquet(sc, "tbl_name_in_spark", "/path/to/parquetdir")

regular_df <- collect(spark_tbl_handle)

spark_disconnect(sc)
11
Aurèle

Reticulateを使用すると、pandas from python fromファイルを寄木できます。これにより、sparkインスタンスを実行する手間を省くことができます。 。

library(reticulate)
library(dplyr)
pandas <- import("pandas")
read_parquet <- function(path, columns = NULL) {

  path <- path.expand(path)
  path <- normalizePath(path)

  if (!is.null(columns)) columns = as.list(columns)

  xdf <- pandas$read_parquet(path, columns = columns)

  xdf <- as.data.frame(xdf, stringsAsFactors = FALSE)

  dplyr::tbl_df(xdf)

}

read_parquet(PATH_TO_PARQUET_FILE)
5
Jonathan

Sparkが更新され、非推奨または名前変更された多くの新しいものと関数があります。

上記のAndyの答えは、spark v.1.4で動作していますが、spark v.2.3で動作します。

  1. Apacheの最新バージョンをダウンロードspark https://spark.Apache.org/downloads.html (リンクのポイント3)

  2. .tgzファイル。

  3. devtoolパッケージをrstudioにインストールします

    install.packages('devtools')
    
  4. terminalを開き、次の手順に従います

    # This is the folder of extracted spark `.tgz` of point 1 above
    export SPARK_HOME=extracted-spark-folder-path 
    cd $SPARK_HOME/R/lib/SparkR/
    R -e "devtools::install('.')"
    
  5. rstudioに戻る

    # load the SparkR package
    library(SparkR)
    
    # initialize sparkSession which starts a new Spark session
    sc <- sparkR.session(master="local")
    
    # load parquet file into a Spark data frame and coerce into R data frame
    df <- collect(read.parquet('.parquet-file-path'))
    
    # terminate Spark session
    sparkR.stop()
    
4
Zmnako Awrahman

Amazon S3バケットの寄木細工のファイルを読み取るには、s3nではなくs3aを使用してみてください。 EMR 1.4.0、RStudio、およびSpark 1.5.0。

2
Betsy Nichols

arrow package を使用するだけです:

install.packages("arrow")
library(arrow)
read_parquet("myfile.parquet")
2
fc9.30