有没有办法直接将 Parquet 文件中的数据插入 PostgreSQL 数据库?

Jav*_*osh 6 postgresql bash hdfs parquet

我正在尝试恢复一些以镶木地板格式保存的历史备份文件,我想从它们中读取一次并将数据写入 PostgreSQL 数据库。

我知道使用 spark 保存的备份文件,但对我来说有一个严格的限制,我不能在数据库机器中安装 spark 或在远程设备中使用 spark 读取镶木地板文件并使用spark_df.write.jdbc. 一切都需要在 DB 机器上进行,在没有 Spark 和 Hadoop 的情况下,只能使用 Postgres 和 Bash 脚本。

我的文件结构类似于:

foo/
    foo/part-00000-2a4e207f-4c09-48a6-96c7-de0071f966ab.c000.snappy.parquet
    foo/part-00001-2a4e207f-4c09-48a6-96c7-de0071f966ab.c000.snappy.parquet
    foo/part-00002-2a4e207f-4c09-48a6-96c7-de0071f966ab.c000.snappy.parquet
    ..
    ..
Run Code Online (Sandbox Code Playgroud)

我希望从每个 parquet 文件夹中读取数据和架构,例如foo,使用该架构创建一个表并将数据写入成形表,仅使用 bash 和 Postgres CLI。

Moe*_*ini 6

您可以使用 spark 并将 parquet 文件转换为 csv 格式,然后将文件移动到 DB 机器并通过任何工具导入它们。

spark.read.parquet("...").write.csv("...")
Run Code Online (Sandbox Code Playgroud)
import pandas as pd
df = pd.read_csv('mypath.csv')
df.columns = [c.lower() for c in df.columns] #postgres doesn't like capitals or spaces

from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/dbname')

df.to_sql("my_table_name", engine)
Run Code Online (Sandbox Code Playgroud)

  • 或者,您甚至可以跳过整个读取 Spark/写入 CSV 的步骤,只需使用“pyarrow.parquet”并使用“ParquetDataset”函数直接读取 pandas - 这可以保存整个数据的写入和读取。 (6认同)
  • 为什么不在这里使用“pd.read_parquet”而不是“spark.read.parquet”? (4认同)

Lov*_*ode 5

我制作了一个库,用于从镶木地板转换为 Postgres\xe2\x80\x99 二进制格式: https: //github.com/adriangb/pgpq

\n