我们如何使用jdbc执行连接查询,而不是使用pyspark获取多个表

我们如何使用jdbc执行连接查询,而不是使用pyspark获取多个表,pyspark,pyspark-sql,Pyspark,Pyspark Sql,客户-c_id、c_名称、c_地址 产品-p_id、p_名称、价格 供应商-s_id、s_名称、s_地址 订单-订单id、订单id、订单id、数量、时间 SELECT o.o_id, c.c_id, c.c_name, p.p_id, p.p_name, p.price * o.quantity AS amount FROM customer c JOIN orders o ON o.c_id = c.c_id JOIN pr

客户-c_id、c_名称、c_地址 产品-p_id、p_名称、价格 供应商-s_id、s_名称、s_地址 订单-订单id、订单id、订单id、数量、时间

SELECT o.o_id,
       c.c_id,
       c.c_name,
       p.p_id,
       p.p_name,
       p.price * o.quantity AS amount
FROM customer c
JOIN orders o ON o.c_id = c.c_id
JOIN product p ON p.p_id = o.p_id;

我想执行上述查询,而不必在pyspark中获取3个表作为单独的数据帧,并对数据帧执行联接

您可以使用查询代替表,如下所述

参考文献

在您的情况下,它将是:

df = spark.read.jdbc("url", """
    (
        SELECT o.o_id,
            c.c_id,
            c.c_name,
            p.p_id,
            p.p_name,
            p.price * o.quantity AS amount
            FROM customer c
            JOIN orders o ON o.c_id = c.c_id
            JOIN product p ON p.p_id = o.p_id
    ) as table""", properties={"user":"username", "password":"password"})
这使用了这种类型的查询来代替表。这也与你的情况有关

df = spark.read.jdbc("url", """
    (
        SELECT o.o_id,
            c.c_id,
            c.c_name,
            p.p_id,
            p.p_name,
            p.price * o.quantity AS amount
            FROM customer c
            JOIN orders o ON o.c_id = c.c_id
            JOIN product p ON p.p_id = o.p_id
    ) as table""", properties={"user":"username", "password":"password"})