2015-05-22 3 views
13

Я хочу обработать файлы Apache Parquet (в моем случае, созданные в Spark) на языке программирования R.Как я могу прочитать паркет в R и преобразовать его в R DataFrame?

Доступен ли считыватель R? Или выполняется работа над одним?

Если нет, то какой был бы наиболее целесообразный способ добраться туда? Примечание. Существуют привязки Java и C++: https://github.com/apache/parquet-mr

+0

указывают нам на файл образца, показывают нам, где формат файла спецификация, расскажите нам немного больше, чем «как я читать файлы формата Foo в 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 попробуйте использовать 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^