如何使用 pysaprk databricks 替换基于其他数据帧的数据帧中的值

问题描述 投票:0回答:1

我的数据块笔记本中有两个数据框。例如数据如下所示:

df1:

id name
1  200/300A/200B
2  805/805B/500
3  22A+100B
4  ;
5  

df2:

ids
805
200B
22A

现在我想用 df2 id 替换 df1 名称为 0,其余的 id 为“1”,例如,dataframe1 中显示为 805、200B 和 22A 的数据需要替换为零。

df

id name
1  1/1/0
2  0/1/1
3  0+1
4  ;
4  
pyspark databricks
1个回答
0
投票

查看以下代码

WITH input AS (
    SELECT 
        id, 
        name,
        r.ids
    FROM VALUES (1 ,'200/300A/200B'),(2 ,'805/805B/500'),(3 ,'22A+100B'),(4 ,';'),(5, NULL) AS (id, name)
    JOIN ( SELECT COLLECT_LIST(ids) AS ids FROM VALUES ('805'),('200B'),('22A') AS (ids) ) r
)
SELECT 
    id,
    CASE WHEN LENGTH(name) == 1 THEN name 
             ELSE     
                transform(
                    array_distinct(
                        regexp_extract_all(name, '[^a-zA-Z0-9]', 0)
                    ), 
                    t -> 
                        CONCAT_WS(
                            t, 
                            transform(
                                split(name, concat('[',t,']')),
                                s -> if(array_contains(ids,s), 0, 1)
                            )
                        )
                )[0]
    END AS name
FROM input
+---+-----+
|id |name |
+---+-----+
|1  |1/1/0|
|2  |0/1/1|
|3  |0+1  |
|4  |;    |
|5  |NULL |
+---+-----+
© www.soinside.com 2019 - 2024. All rights reserved.