У меня есть оригинальный фрейм данных с несколькими столбцами, чтобы упростить их: product_id, category_id, product_type. Теперь я хочу присоединить информацию о product_quality_level к этому фрейму данных, но информация поступает из разных источников.
Теперь мне нужно отфильтровать исходный фрейм данных с различными условиями, затем объединить с соответствующим фреймом данных, полученным из разных источников, и в конце объединить эти фреймы данных.
productTypeOneDF (product_id, product_quality_level)
(левое соединение на основе product_id, когда product_type равно 1,2)
productTypeTwoDF (идентификатор продукта, идентификатор категории, уровень качества продукта)
(левое соединение на основе product_id и category_id, когда product_type равно 3,4)
для другого 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()