2015-05-22 277 views
13

我想在R編程語言中處理Apache Parquet文件(在我的情況下,在Spark中生成)。如何在R中讀取Parquet並將其轉換爲R DataFrame?

是否提供R閱讀器?或者正在完成一項工作?

如果不是,那麼最便捷的方法是什麼?注意:有Java和C++綁定:https://github.com/apache/parquet-mr

+0

點我們的示例文件,告訴我們在哪兒文件格式規範是,告訴我們更多的不是「做我怎麼讀富格式文件在R?「 – Spacedman

+0

@Spacedman對不起,忘了觀衆會更普遍。這是一個自我描述的列式數據存儲,理論上它將直接映射到R數據幀。 – metasim

回答

23

如果您使用的是Spark,那麼Spark 1.4的發佈現在相對比較簡單,請參閱下面的示例代碼,該代碼使用SparkR包,該包現在是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

我不知道,如果你沒有使用星火,你可以使用任何其他包裝。

+0

非常感謝您提供這樣一個全面的例子。對我非常有幫助,我相信,還有很多其他人。 – metasim

+0

任何猜測爲什麼這將不適用於S3上的我的實木複合地板文件?關鍵和祕密被聲明,python可以用sqlCtx.read.parquet(「s3n:// bucket/path/part1 = whatever /」)讀取它們。我也嘗試將密鑰和密碼直接放在URL中 - 「s3n:// key:pass @ bucket/path」 –

+0

害怕我沒有使用S3,所以我不確定什麼可行。可能是因爲S3在SparkR中還不被支持,我們剛剛看到它在覈心中的第一個版本,並且遇到了問題。您是否確認了從pyspark/scala會話中加載的數據? - 如果是這樣,我會更傾向於上述理論。可能值得檢查SparkR問題日誌(https://issues.apache.org/jira/browse/SPARK/component/12325400/?selectedTab=com.atlassian.jira.jira-projects-plugin:component-summary-panel )或者只是嘗試搜索與S3有關的問題? –

2

要讀取Amazon S3存儲桶中的parquet文件,請嘗試使用s3a而不是s3n。使用EMR 1.4.0,RStudio和Spark 1.5.0閱讀鑲木地板文件時,這對我很有用。

2

或者到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)