繁体   English   中英

更改 PySpark Dataframe 中的多个值

[英]Changing Multiple Values in PySpark Dataframe

我正在处理的数据集样本:

test = sqlContext.createDataFrame([(1,2),
                                   (1,3),
                                   (4,5)],
                                  ['cod_item_2','alter_cod'])

在此处输入图像描述

test_2 = sqlContext.createDataFrame([(1,"shamp_1"),(2,"shamp_2"),
                                     (4,"tire_1"),(5,"tire_2"),
                                     (3,"shamp_3"),(6,"cookie"),
                                     (7,"flower"),(8,"water")],
                                    ['cod_item','product_name'])

在此处输入图像描述

第一个 dataframe 包含项目和与其等效的项目。

第二个 dataframe 包含所有项目和产品名称。

我想用第一个 dataframe 拉出与第二个 dataframe 等价的项目,替换为代表它们的项目(第一个表左侧的项目),结果如下:

在此处输入图像描述

我尝试对两个数据框进行完全连接并使用when子句更改值。 但它最终不起作用。

你可以做2个连接。 test_2test然后再次与test_2 (自加入)。 为此,我在数据帧上使用alias

from pyspark.sql import functions as F

test_3 = (
    test_2.alias('a')
    .join(test, F.col("a.cod_item") == F.col("alter_cod"), "left")
    .join(test_2.alias('b'), F.col("cod_item_2") == F.col("b.cod_item"), "left")
    .select(
        F.coalesce("b.cod_item", "a.cod_item").alias("cod_item"),
        F.coalesce("b.product_name", "a.product_name").alias("product_name")
    )
)
test_3.show()
# +--------+------------+
# |cod_item|product_name|
# +--------+------------+
# |       4|      tire_1|
# |       1|     shamp_1|
# |       1|     shamp_1|
# |       4|      tire_1|
# |       7|      flower|
# |       6|      cookie|
# |       1|     shamp_1|
# |       8|       water|
# +--------+------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM