簡體   English   中英

將 sql 語句轉換為 pyspark

[英]convert sql statement to pyspark

我創建了一個 sql 代碼,我想將其轉換為 pyspark 代碼。 除了一件事,它有效。 但是我怎樣才能最好地插入總和 function。

SELECT r_date, abc_code, sum(case when kpi_id=1234 then value else null end) as XXX, 
       sum(case when kpi_id=5678 then value else null end) as YYY from rate 
WHERE abc_code = 'AS55' AND org_id = '12-3' 
GROUP BY r_date, abc_code 
ORDER BY r_date DESC, abc_code;

Pyspark代碼

rate_df = rate_df.select(
    'org_id',
    'abc_code',
    'value',
    'r_date',
    expr("case when kpi_id == '1234' then value else ' ' end").alias('XXX'),
    expr("case when kpi_id == '5678' then value else ' ' end").alias('YYY')
    ) \
    .where((F.col('abc_code') == 'AS55') &
           (F.col('organisation_id') == '12-3'))

如何在 pyspark 中插入總和 function 以獲得一行中的值。

我已經實現的以下代碼:

rate_df = rate_df.select(
    F.col('creation_date').alias('r_date'),
    'organisation_id',
    'b_employee',
    'abc_code',
    'kpi_date',
    'kpi_id',
    'value'
    )
nh_rate_df = rate_df.where(
        (F.col('abc_code') == 'AS55') &
        (F.col('organisation_id') == '12-3')
     ).groupBy(
        'organisation_id', 'r_date', 'b_employee', 'kpi_date', 'abc_code'
    ).agg(
        F.sum(F.when(F.col('kpi_id') == 1234, F.col('value'))).alias('xxx'),
        F.sum(F.when(F.col('kpi_id') == 5678, F.col('value'))).alias('YYY'),
    ).orderBy(
        F.desc('kpi_date'), F.col('abc_code')
    )
nh_rate_df = nh_rate_df.join(s_function_df, 'abc_code', 'left')
nh_rate_df = nh_rate_df.join(hst_df, 'organisation_id', 'left')

我得到的結果沒有總結所有匹配的行。

r_date kpi_date 組織 ID abc_code b_empl XXX 年年
2020-12-02 2020-11-01 00:00:00 12-3 AS55 一個 1.0000 null
2020-12-02 2020-11-01 00:00:00 12-3 AS55 null null 1.0000
2020-11-02 2020-10-01 00:00:00 12-3 AS55 一個 null 1.0000
2020-11-02 2020-10-01 00:00:00 12-3 AS55 null 1.0000 null
2020-10-02 2020-09-01 00:00:00 12-3 AS55 一個 2.0000 null
2020-10-02 2020-09-01 00:00:00 12-3 AS55 null null 1.0000
2020-09-22 2020-08-01 00:00:00 12-3 AS55 null 1.0000 1.0000
2020-09-22 2020-08-01 00:00:00 12-3 AS55 一個 null null

雖然我有相同的日期。 可能是因為加入嗎?

如果我運行 sql 代碼,我會得到這個結果

r_date kpi_date 組織 ID abc_code b_empl XXX 年年
2020-12-02 2020-11-01 00:00:00 12-3 AS55 一個 1.0000 2.0000
2020-11-02 2020-10-01 00:00:00 12-3 AS55 一個 1.0000 2.0000
2020-10-02 2020-09-01 00:00:00 12-3 AS55 一個 2.0000 1.0000
2020-09-22 2020-08-01 00:00:00 12-3 AS55 null 2.0000 1.0000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM