Я хочу использовать паркет в одном из моих проектов в качестве хранилища столбцов. Но я не хочу, чтобы это зависело от hadoop/hdfs libs. Можно ли использовать паркет вне hdfs? Или Какова минимальная зависимость?
Паркет без Hadoop?
Ответ 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")
Ответ 5
В настоящее время вам не нужно полагаться на hadoop так сильно, как раньше.
См. Мой другой пост: Как просмотреть файл Apache Parquet в Windows?