Вы можете сначала сгладить столбец id
, преобразовав его в массив и применив explode
.Затем вы можете применить обычную операцию соединения между фреймами данных.
Например:
val df1 = Seq(("[1,10,20]", "bat","43243"),("[20,4,10]","mouse","4324432"),("[30,20,3]", "horse","4324234")).toDF("id", "word","userid")
val df2 = Seq((1, "raj", "name"),(2, "kiran","name"),(3,"karnataka","state"),(4, "Andrapradesh","state")).toDF("id", "name", "code")
val flattenDf1 = df1.
select(
col("id"),
expr("""split(regexp_replace(id, "\\[|\\]",""), ",")""").as("idArray"), col("word"),
col("userid")).
withColumn("id_", explode(col("idArray"))).
drop("idArray")
df2.as("df2").
join(
flattenDf1.as("df1"),
col("df2.id") === col("df1.id_")).
filter("code = 'state'").
select("df1.id", "word", "userid", "name").
show
// Result:
// +---------+-----+-------+------------+
// | id| word| userid| name|
// +---------+-----+-------+------------+
// |[30,20,3]|horse|4324234| karnataka|
// |[20,4,10]|mouse|4324432|Andrapradesh|
// +---------+-----+-------+------------+
Надеюсь, это поможет.