【问题标题】:Pyspark sql for oracle subquery用于 oracle 子查询的 Pyspark sql
【发布时间】:2020-01-10 21:42:26
【问题描述】:

如何将以下基于 oracle 的 sql 查询写入等效的 pyspark sql,因为这是由于嵌套在 spark.sql(*query) 下而不受支持 有没有办法使用 pyspark 数据框来编写这个?

SELECT TABLE1.COL1 
FROM TABLE1 
WHERE COL2 = (
    SELECT MAX(COL2) 
    FROM TABLE1 
    WHERE TABLE1.COL3 = TABLE2.COL3 OR TABLE1.COL4 = TABLE2.COL4
)

TABLE1 有列 COL1, COL2, COL3, COL4 TABLE2 有列COL3, COL4

【问题讨论】:

    标签: pyspark pyspark-sql pyspark-dataframes


    【解决方案1】:

    如果您使用 JDBC 驱动程序,您能否使用此语法:

      sql_request = "(select TABLE1.COL1 FROM TABLE1 WHERE COL2 = (SELECT MAX(COL2) FROM TABLE1 WHERE TABLE1.COL3 = TABLE2.COL3 OR TABLE1.COL4 = TABLE2.COL4))"
    
      df_request = spark.read.jdbc(url=url,table=sql_request,properties=db_properties)
    

    希望对你有帮助

    【讨论】:

    【解决方案2】:

    你可以试试这个。

    from pyspark.sql.functions import max
    
    table1.select(table1.COL1)\
      .where(table1.COL2 == table2.select(max(table2.COL2).alias('MAX_COL2'))\
          .where((table1.COL3 == table2.COL3) | (table1.COL4 == table2.COL4)).collect().head().MAX_COL2).show()
    

    希望这能有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多