Есть ли способ вычесть два кадра данных с алфавитно-цифровым типом данных. Я пытался использовать, кроме, но количество записей не подходит - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь вычесть два фрейма данных в scala, и мои типы данных являются буквенно-цифровыми, как будто у меня есть строка в качестве типа данных для столбца id. Я пытался использовать, кроме

df1.merge(
    df2, how='outer', indicator=True
).query('_merge == "left_only"').drop('_merge', 1) 

val df1 = Seq(("1","2019-04-03 14:45:00","1"),("2","2019-04-03 14:45:00","1"),("3","2019-04-03 14:45:00","1")).toDF("ID","Timestamp","RowNum") 
val df2 = Seq(("2","2019-04-03 13:45:00","2"),("3","2019-04-03 13:45:00","2")).toDF("ID","Timestamp","RowNum") 
val idDiff = df1.select("ID").except(df2.select("ID")) 
val outputDF = df1.join(idDiff, "ID") 

Но ничего не помогает. Я не получил правильный счет. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 октября 2019

Таким образом, outputDF должен содержать только одну запись "1","2019-04-03 14:45:00","1"?

Я запустил ваш код и похоже, что он работает, вы можете получить тот же результат с помощью left_anti join.

  val idDiff = df1.select("ID").except(df2.select("ID"))
  val outputDF = df1.join(idDiff, "ID")
  outputDF.show()

  df1.join(df2,Seq("ID"),"left_anti").show()
    +---+-------------------+------+
    | ID|          Timestamp|RowNum|
    +---+-------------------+------+
    |  1|2019-04-03 14:45:00|     1|
    +---+-------------------+------+

    +---+-------------------+------+
    | ID|          Timestamp|RowNum|
    +---+-------------------+------+
    |  1|2019-04-03 14:45:00|     1|
    +---+-------------------+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...