我有一个包含多列的原始数据框,为简化起见,它们分别是product_id,category_id,product_type。现在,我想将product_quality_level信息加入此数据框,但是该信息来自不同的来源。
现在,我需要过滤具有不同条件的原始数据框,然后将其与从不同来源获得的相应数据框结合起来,最后将这些数据框合并。
productTypeOneDF(product_id,product_quality_level) (当product_type为1,2时,基于product_id进行左联接)
productTypeTwoDF(product_id,category_id,product_quality_level) (当product_type为3,4时,基于product_id和category_id的左联接)
对于其他product_type,它们的默认product_quality_level为-1。
现在,我的代码编写如下
val originalDF = ... (product_id,product_type)
val type1DF = originalDF.filter("product_type in (1,2)")
.join(productTypeOneDF,Seq("product_id"),"left")
val type2DF = originalDF.filter("product_type in (3,4)")
.join(productTypeTwoDF,Seq("product_id","category_id"),"left")
val type3DF = originalDF.filter("product_type not in (1,2,3,4)")
.withColumn("product_quality_level",lit(-1))
val allProductDF = type1DF.union(type2DF).union(type3DF)
但是有没有更好的方法来做这样的工作?
例如,
val resultDF = originalDF.when("").join()
.when("").join()
.when("").join()