广播小节目
和
与basedf左联接
,然后使用
udf
功能检查
raw_code
包含在
codes
,如果它确实返回
原始代码
否则的第一个值
代码
数组。
import org.apache.spark.sql.functions._
def retainUdf = udf((rawCode: Int, codes:Seq[Int]) => if(codes == null || codes.isEmpty) rawCode else if(codes.contains(rawCode)) rawCode else codes.head)
baseDf.join(broadcast(lookUpDf), Seq("seller_name"), "left")
.select(col("seller_name"), retainUdf(col("raw_code"), col("codes")).as("raw_code"))
它应该给你
+-----------+--------+
|seller_name|raw_code|
+-----------+--------+
|BlueR |5813 |
|jack |5968 |
|Cwireless |7349 |
|Tea |4899 |
|Tea |5813 |
|blueR |5678 |
|jack |4814 |
+-----------+--------+
我希望答案对你有帮助