代码之家  ›  专栏  ›  技术社区  ›  desaiankitb

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

  •  2
  • desaiankitb  · 技术社区  · 7 年前

    客户-c\U id、c\U名称、c\U地址 产品-p\U id、p\U名称、价格 供应商-s\U id、s\U名称、s\U地址 订单-订单号、订单号、订单号、数量、时间

    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个表作为单独的数据帧,也不需要在数据帧上执行连接。

    1 回复  |  直到 7 年前
        1
  •  6
  •   darshil    7 年前

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

    参考 PySpark Documentation

    df = spark.read.jdbc(
            "url", "(query) 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"})
    

    answer 已使用此类型的查询代替表。还有这个 question 与您的情况相关