将具有List列的数据帧相交

时间:2016-05-12 06:33:17

标签: apache-spark

我有两个将List作为列的数据帧。除了列表的顺序在数据帧中不同之外,两个数据帧都是相同的 例如。架构:( id文本,名称列表'<'text>)
df1:(5,WrappedArray(abc,pqr,xyz))
df2:(5,WrappedArray(abc,xyz,pqr))
当我使用相交时,我不会在结果中获得此记录。我怎样才能得到这些记录的交集?

1 个答案:

答案 0 :(得分:0)

我认为你是对的,最简单的方法是对列表列进行排序。

val sortListFunc = udf((inputList: WrappedArray[String]) => {
    inputList.sorted
})

val df1Sorted = df1
   .withColumn("name_sorted",sortListFunc(col("name"))
   .select($"id","name_sorted".as("name"))

val df2Sorted = df2
   .withColumn("name_sorted",sortListFunc(col("name"))
   .select($"id","name_sorted".as("name"))

然后你应该能够加入或交叉。