Rプログラミング言語で Apache Parquet ファイル(私の場合はSparkで生成)を処理したいと思います。
Rリーダーは利用可能ですか?または、1つで作業が行われていますか?
そうでない場合、そこに到達するための最も適切な方法は何でしょうか?注:JavaおよびC++バインディング: https://github.com/Apache/parquet-mr
これには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>
#> …
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を使用していない場合に使用できる他のパッケージは知りません。
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)
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)
Sparkが更新され、非推奨または名前変更された多くの新しいものと関数があります。
上記のAndyの答えは、spark v.1.4で動作していますが、spark v.2.3で動作します。
Apacheの最新バージョンをダウンロードspark https://spark.Apache.org/downloads.html (リンクのポイント3)
.tgz
ファイル。
devtool
パッケージをrstudio
にインストールします
install.packages('devtools')
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('.')"
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()
Amazon S3バケットの寄木細工のファイルを読み取るには、s3nではなくs3aを使用してみてください。 EMR 1.4.0、RStudio、およびSpark 1.5.0。
arrow package を使用するだけです:
install.packages("arrow")
library(arrow)
read_parquet("myfile.parquet")