Фрейм данных Spark join на основе столбца другого типа spark 1.6 - PullRequest
0 голосов
/ 18 июня 2020

У меня есть 2 фрейма данных df1 и df2. Я присоединяюсь к df1 и df2 на основе столбцов col1 и col2. Однако тип данных col1 - string в df1, а тип col2 - int в df2. Когда я пытаюсь присоединиться, как показано ниже,

val df3 = df1.join(df2,df1("col1") === df2("col2"),inner).select(df2("col2"))

Соединение не работает и возвращает пустой тип данных. Можно ли будет получить правильный вывод без изменения типа col2 в df2

1 Ответ

2 голосов
/ 18 июня 2020
  val dDF1 = List("1", "2", "3").toDF("col1")
  val dDF2 = List(1, 2).toDF("col2")

  val res1DF = dDF1.join(dDF2, dDF1.col("col1") === dDF2.col("col2").cast("string"), "inner")
      .select(dDF2.col("col2"))
  res1DF.printSchema()
  res1DF.show(false)
  //      root
  //      |-- col2: integer (nullable = false)
  //
  //      +----+
  //      |col2|
  //      +----+
  //      |1   |
  //      |2   |
  //      +----+

получить DataFrame схемы

val sch1 = dDF1.schema
sch1: org.apache.spark.sql.types.StructType = StructType(StructField(col1,StringType,true))
// public StructField(String name,
//               DataType dataType,
//               boolean nullable,
//               Metadata metadata)
...