2015-05-22 15 views
13

Vorrei elaborare i file Apache Parquet (nel mio caso, generato in Spark) nel linguaggio di programmazione R.Come leggo un Parquet in R e lo converto in un R DataFrame?

È disponibile un lettore R? O il lavoro viene svolto su uno?

In caso contrario, quale sarebbe il modo più conveniente per arrivarci? Nota: Esistono binding Java e C++: https://github.com/apache/parquet-mr

+0

punto noi di un file di esempio, ci mostrano dove la specifica formato del file è, ci dicono un po 'più di "Come faccio a leggere i file in formato Foo in R? " – Spacedman

+0

@Spacedman Scusa, ho dimenticato che il pubblico sarebbe stato più generale. Si tratta di un archivio dati colonnare auto-descrittivo che teoricamente sarebbe mappato direttamente ai frame di dati R. – metasim

risposta

23

Se si utilizza Spark, questo è ora relativamente semplice con il rilascio di Spark 1.4 vedere il codice di esempio sotto che utilizza il pacchetto SparkR che ora fa parte del nucleo di Apache Spark struttura.

# 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() 

Un esempio espanso è mostrato @ https://gist.github.com/andyjudson/6aeff07bbe7e65edc665

Io non sono a conoscenza di qualsiasi altro pacchetto che si potrebbe usare se non si sta utilizzando Spark.

+0

Grazie mille per aver fornito un esempio così completo. Estremamente utile per me, e ne sono sicuro, molti altri. – metasim

+0

Qualche ipotesi sul perché questo non funzionerà con i miei file parquet su S3? Chiave e segreto sono dichiarati, e python può leggerli bene con sqlCtx.read.parquet ("s3n: // bucket/path/part1 = whatever /"). Ho anche provato a inserire la chiave e la password direttamente nell'url - "s3n: // key: pass @ bucket/path" –

+0

Paura di non aver usato S3 quindi non sono sicuro di cosa funzioni o meno. Potrebbe essere che S3 non sia ancora supportato in SparkR, abbiamo appena visto la prima versione di esso in core e ci si imbatte in problemi. Hai confermato il caricamento dei dati da una sessione di pyspark/scala? - Se è così, sarei più tentato dalla teoria di cui sopra. Può valere la pena controllare i registri dei problemi di SparkR (https://issues.apache.org/jira/browse/SPARK/component/12325400/?selectedTab=com.atlassian.jira.jira-projects-plugin:component-summary-panel) o semplicemente prova a cercare problemi relativi a S3? –

2

Per leggere un file parquet in un bucket Amazon S3, provare a utilizzare s3a anziché s3n. Questo ha funzionato per me durante la lettura di file parquet usando EMR 1.4.0, RStudio e Spark 1.5.0.

2

alternativa a SparkR, si potrebbe ora usare 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) 
Problemi correlati