PySpark 与 SQLalchemy,哪个更适合处理大数据?

问题描述 投票:0回答:2

我有一个包含大量数据(200Gb+)的三角洲湖,我需要使用可以在 Python 中运行 SQL 的东西来清除它。我不想直接清除 .parquet 文件,我想直接使用数据库。

我的问题是哪一个更适合这项任务?

我认为它是 PySpark,因为它具有分布式计算功能,而且人们使用 SQLalchemy 执行这样的大型查询也并不罕见。

python database pyspark bigdata
2个回答
0
投票

PySpark 和 SQLAlchemy 并不是真正具有可比性的工具。

SQLAlchemy 只是一个 ORM,可用于混淆代码在应用程序中嵌入数据库操作。它所做的就是从各种方法调用中获取输入,并使用它来构建 SQL 查询,然后将其从数据库发送出去。数据库决定将用于实现查询所要求的任何内容的最佳物理访问计划。

PySpark 是 Spark 的 Python 接口,它(除其他外)是一个用于构建可在大型存储集群上高效运行的数据管道的框架。与 SQLAlchemy 不同,Spark 本身将决定查询计划是什么样子以及如何在集群的节点上编排它。

您应该使用哪个可能只是底层存储系统是什么样子的问题。它是一个多节点 Hadoop 集群,您的工作将受益于跨节点的并行执行吗?然后使用 Spark。或者,您的存储是单个 Postgres 数据库吗?然后使用 SQLAlchemy。


0
投票

我确实认为您的问题结构不正确。假设您想要连接到外部数据库,使用 pyspark 工具连接或导入 SQLAlchemy 并使用它会更好吗?

这是根据具体情况而定的:

导入后您是否使用 pandas 来操作数据?然后使用 SQLAlchemy。 您是否使用 pyspark 工具以分布式方式进行操作?然后使用 pyspark 库。使用 pyspark.sql 的缺点是您需要使用 jdbc 驱动程序,因此它看起来像这样:

from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("DatabaseConnection") \
    .config("spark.jars", "/path/to/your/jdbc_driver.jar") \
    .getOrCreate()

# assuming you are using mysql
db_url = "jdbc:mysql://your_database_hostname:3306/your_database_name"
db_properties = {
    "user": "your_username",
    "password": "your_password"
}
table_name= "your_table_name"

然后您可以阅读整个表格:

data_frame = spark.read.format("jdbc") \
    .option("url", db_url) \
    .option("dbtable", table_name) \
    .options(**db_properties) \
    .load()

或通过查询阅读:

query = f"(SELECT * FROM table_name) AS tmp"
data_frame = spark.read.format("jdbc") \
    .option("url", db_url) \
    .option("query", query) \
    .options(**db_properties) \
    .load()

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.