Как проверить, равен ли df1 df2 в PySpark? - PullRequest
1 голос
/ 27 апреля 2020
df1.show()
+---------+
|Data_Type|
+---------+
|   string|
|   string|
|      int|
+---------+
df2.show()
+---------+
|Data_Type|
+---------+
|   string|
|   string|
|      int|
+---------+

Я хочу сравнить (проверка на равенство) столбцы в df1 со строками в df2 ["Column_name"].

Я попытался сравнить их с помощью объединений, т. Е. По

df1.join(df2,on="Data_Type",how="left").join(df2,on="Data_Type",how="right")
if(df3.count() == df1.count() == df2.count()):
    print(True)

Но это не работает, так как у меня есть повторяющиеся значения в столбце «Data_Type», и я получаю перекрестный вид продукта после объединения, как показано ниже:

+---------+
|Data_Type|
+---------+
|      int|
|   string|
|   string|
|   string|
|   string|
|   string|
|   string|
|   string|
|   string|
+---------+

Любой другой способ сделать проверка на равенство данных?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Надеюсь, у вас все хорошо в эти смутные времена!

Вы можете попробовать вычитать два кадра данных после преобразования их в наборы. Таким образом, вы можете преобразовать результат в фрейм данных.

    lst = []
    for row in set(df1.collect()) - set(df2.collect()):
         lst.append(row)
    spark.createDataFrame(lst)

Кроме того, поскольку мы используем наборы, если у вас более одного столбца, порядок не имеет значения в обоих фреймах данных.

Надеюсь, это поможет!

0 голосов
/ 27 апреля 2020

Используйте exceptAll (сохраняет дубликаты) (или) subtract в искре.

df1.show()
#+---------+
#|Data_Type|
#+---------+
#|   string|
#|   string|
#|      int|
#+---------+


df2.show()
#+---------+
#|Data_Type|
#+---------+
#|   string|
#|   string|
#|      int|
#+---------+

df1.exceptAll(df2).count()
df2.exceptAll(df1).count()
#0
df1.subtract(df2).count()
df2.subtract(df1).count()
#0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...