擅长:python、mysql、java
<p>基于K L的想法,可以使用foldLeft生成联接列表达式:</p>
<pre><code>def nullSafeJoin(rightDF: DataFrame, columns: Seq[String], joinType: String)(leftDF: DataFrame): DataFrame =
{
val colExpr: Column = leftDF(columns.head) <=> rightDF(columns.head)
val fullExpr = columns.tail.foldLeft(colExpr) {
(colExpr, p) => colExpr && leftDF(p) <=> rightDF(p)
}
leftDF.join(rightDF, fullExpr, joinType)
}
</code></pre>
<p>然后,可以调用此函数,如下所示:</p>
<pre><code>aDF.transform(nullSafejoin(bDF, columns, joinType))
</code></pre>