使用两列(不区分大小写)在数据帧上使用 Scala LEFT JOIN

标签 scala apache-spark dataframe join apache-spark-sql

我创建了以下方法,它采用两个数据帧; lhs & rhs 及其各自的第一列和第二列作为输入。该方法应使用为每个数据帧提供的两列返回这两个帧之间的左连接结果(忽略它们的大小写敏感性)。

我面临的问题是它正在做更多的内部连接。它返回的行数是 lhs 数据框中行数的 3 倍(由于 rhs 中的重复值),但由于它是左连接,所以 rhs 数据框中的重复和行数应该无关紧要。

  def leftJoinCaseInsensitive(lhs: DataFrame, rhs: DataFrame, leftTableColumn: String, rightTableColumn: String, leftTableColumn1: String, rightTableColumn1: String): DataFrame = {
    val joined: DataFrame = lhs.join(rhs, upper(lhs.col(leftTableColumn)) === upper(rhs.col(rightTableColumn)) && upper(lhs.col(leftTableColumn1)) === upper(rhs.col(rightTableColumn1)), "left");
    return joined
  }

最佳答案

如果rhs中有重复的值,那么lhs被复制是正常的。如果 lhs row 中连接列的连接值与多个 rhs 行 匹配,则连接的 dataframe 应该有多个 rows来自 lhs 匹配来自 rhsrows

例如

lhs dataframe
+--------+--------+--------+
|col1left|col2left|col3left|
+--------+--------+--------+
|a       |1       |leftside|
+--------+--------+--------+

rhs dataframe
+---------+---------+---------+
|col1right|col2right|col3right|
+---------+---------+---------+
|a        |1        |rightside|
|a        |1        |rightside|
+---------+---------+---------+

那么正常有left join as

left joined lhs with rhs
+--------+--------+--------+---------+---------+---------+
|col1left|col2left|col3left|col1right|col2right|col3right|
+--------+--------+--------+---------+---------+---------+
|a       |1       |leftside|a        |1        |rightside|
|a       |1       |leftside|a        |1        |rightside|
+--------+--------+--------+---------+---------+---------+

您可以了解更多信息here

关于使用两列(不区分大小写)在数据帧上使用 Scala LEFT JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47055535/

相关文章:

scala - 如何解决错误 : value reduceByKey is not a member of org. apache.spark.rdd.RDD[(Int, Int)]?

windows - Spark Windows 安装 Java 报错

scala - 将数据框转换为数据集会保留额外的列

python - 如何引用数据框中的单元格

scala - 使用 for/yield 从序列中删除元素

scala - 如何防止 Actor 邮箱在 Scala 中增长?

apache-spark - Java Spark JavaPairRDD 中重复过滤的最佳方法

Scala 对大数的阶乘有时会崩溃,有时不会

scala - scala/java 中的 Camel 案例 json 到蛇案例 json

python - 按 NaN 计数的降序对数据帧的行进行排序