【问题标题】:Facing issue while writing SQL in pyspark在 pyspark 中编写 SQL 时面临的问题
【发布时间】:2021-08-13 17:44:00
【问题描述】:

我正在尝试将以下 SQL 代码转换为 pyspark。有人可以帮我吗

UPDATE B 
SET col = 'a'
FROM table B
WHERE (case when left(util,1) in ('A', 'B') then count  else PROCS end < 1)

这里,util、count、procs 是列名。

在 pyspark 中编码时,我可以像这样创建一个新列 'col':

df1 = df1.withColumn("col", case condition ,a)

【问题讨论】:

  • 我怀疑如果您将上述内容转换为简单的ANDOR 逻辑,您会更轻松。我还建议将left(util,1) in ('A', 'B') 更改为util LIKE '[AB]%。这样做并摆脱 CASE 表达式将意味着您将拥有一个 SARGable 查询。

标签: sql sql-server apache-spark pyspark apache-spark-sql


【解决方案1】:

您可以使用when 来执行与update 等效的操作:

df1 = df1.withColumn(
    'col', 
    F.when(
        F.expr("case when left(util,1) in ('A', 'B') then count else PROCS end < 1"),
        F.lit('a')
    ).otherwise(F.col('col'))
)

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2020-09-24
    • 2017-11-12
    相关资源
    最近更新 更多