import $ivy.`org.apache.spark::spark-sql:3.1.1` import $ivy.`org.typelevel::cats-core:2.3.0` import $ivy.`com.lihaoyi::sourcecode:0.2.6` import $ivy.`org.hablapps::doric:0.0.1` import org.apache.spark._ import org.apache.spark.sql._ import org.apache.spark.sql.{functions => f} import doric._ val spark = org.apache.spark.sql.SparkSession.builder().appName("test").master("local").getOrCreate() spark.sparkContext.setLogLevel("ERROR") import spark.implicits._ val leftdf = List((1, 1, "hi"), (2, 2, "bye"), (3, 3, "3")).toDF("id-left", "id", "value-left") val rightdf = List((1, 1, "hi"), (2, 2, "bye"), (3, 3, "3")).toDF("id-right", "id", "value-right") leftdf.join(rightdf, f.col("id-left") === f.col("id-right")) leftdf.join(rightdf, leftdf("id") === rightdf("id")) leftdf.alias("left").join(rightdf.alias("right"), f.col("left.id") === f.col("right.id")) val dfjoin = leftdf.join(rightdf, leftdf("id") === rightdf("value-right")) dfjoin.show // Scala will prevent this from compiling successfully def dfjoin = leftdf.join(rightdf, LeftDF.colInt("id") === RightDF.colString("value-right"), "inner") val dfjoin = leftdf.join(rightdf, LeftDF.colInt("id-left") === RightDF.colInt("value-right"), "inner") val dfjoin = leftdf.join(rightdf, LeftDF.colInt("id-left1") === RightDF.colInt("value-right"), "inner") leftdf.join(rightdf, LeftDF.colInt("id") === RightDF.colInt("id"), "inner") val leftCol = LeftDF.colString("id2") val rightCol = RightDF(/* complex column expression here*/ colInt("id").cast[String]) leftdf.join(rightdf, leftCol === rightCol, "inner").show