Паркет без Hadoop?

Я хочу использовать паркет в одном из моих проектов в качестве хранилища столбцов. Но я не хочу, чтобы это зависело от hadoop/hdfs libs. Можно ли использовать паркет вне hdfs? Или Какова минимальная зависимость?

Ответ 1

Исследуя тот же вопрос, я обнаружил, что, по-видимому, это невозможно на данный момент. Я нашел эту проблему git, которая предлагает развязать паркет из хаоап-апи. По-видимому, это еще не сделано.

В Apache Jira я обнаружил проблему, которая запрашивает способ прочитать файл паркета за пределами hadoop. К моменту написания он не решен.

РЕДАКТИРОВАТЬ:

Проблемы больше не отслеживаются на github (первая ссылка выше мертва). Более новая проблема, которую я нашел, находится на apache Jira со следующим заголовком:

упростить чтение и запись паркетных файлов в java, не завися от hadoop

Ответ 2

Поздно к партии, но я работал над тем, что должно сделать это возможным: https://github.com/jmd1011/parquet-readers.

Это все еще находится в стадии разработки, но окончательная реализация должна быть выпущена через месяц или два из этого.

Изменить: Месяцы спустя, и все еще работаю над этим! Он находится в активном развитии, просто занимает больше времени, чем ожидалось.

Ответ 3

Какие данные у вас есть в Парке? Вам не требуется HDFS для чтения файлов Parquet. Это определенно не является предварительным условием. Мы используем паркетные файлы в Incorta для наших промежуточных столов. Мы не поставляем с зависимостью от HDFS, однако вы можете хранить файлы на HDFS, если хотите. Очевидно, что мы в Incorta можем читать непосредственно из файлов паркета, но вы также можете использовать Apache Drill для подключения, используйте файл:///как соединение, а не hdfs:///См. Ниже пример.

Чтобы прочитать или записать данные Паркета, вам необходимо включить формат Паркета в определения формата плагина хранилища. Определение плагина dfs включает формат Паркета.

{
  "type" : "file",
  "enabled" : true,
  "connection" : "file:///",
  "workspaces" : {
  "json_files" : {
  "location" : "/incorta/tenants/demo//drill/json/",
  "writable" : false,
  "defaultInputFormat" : json
  } 
},

Ответ 4

Поскольку это просто формат файла, очевидно, можно отделить паркет от экосистемы Hadoop. В настоящее время самый простой подход, который я мог найти, был через Apache Arrow, см. Здесь пример Python.

Вот небольшая выдержка из официальных документов PyArrow:

Пишу

In [2]: import numpy as np

In [3]: import pandas as pd

In [4]: import pyarrow as pa

In [5]: df = pd.DataFrame({'one': [-1, np.nan, 2.5],
   ...:                    'two': ['foo', 'bar', 'baz'],
   ...:                    'three': [True, False, True]},
   ...:                    index=list('abc'))
   ...: 

In [6]: table = pa.Table.from_pandas(df)

In [7]: import pyarrow.parquet as pq

In [8]: pq.write_table(table, 'example.parquet')

чтение

In [11]: pq.read_table('example.parquet', columns=['one', 'three'])

РЕДАКТИРОВАТЬ:

С Пандами напрямую

Также возможно использовать панды непосредственно для чтения и записи DataFrames. Это делает это так же просто, как my_df.to_parquet("myfile.parquet") и my_df = pd.read_parquet("myfile.parquet")