2017-02-10 2 views
1

У меня есть ниже сценарий:Как выполнить проверку равенства двух DataFrames?

У меня 2 dataframes, содержащих только один столбец Позволяет сказать

DF1=(1,2,3,4,5) 
DF2=(3,6,7,8,9,10) 

В основном эти значения ключей и я создаю паркетный файл DF1, если ключи в DF1 не являются в DF2 (В текущем примере он должен возвращать значение false). Мой текущий способ достижения мое требование является:

val df1count= DF1.count 
val df2count=DF2.count 
val diffDF=DF2.except(DF1) 
val diffCount=diffDF.count 
if(diffCount==(df2count-df1count)) true 
else false 

Проблема с этим подходом, я звоню действие элементов 4 раза, что это точно не лучшим образом. Может ли кто-нибудь предложить мне лучший эффективный способ достижения этого?

ответ

8

Вы можете использовать intersect, чтобы получить значения, общие для обоих DataFrames, а затем проверить, если он пуст:

DF1.intersect(DF2).take(1).isEmpty 

Это будет использовать только одно действие (take(1)) и довольно быстро один.

+0

В dataframes может не иметь никаких общих ценностей, но и быть не equal.Jacek вопрос о проверке равенства. –

1

Вот чек, если Dataset первый IST равен Dataset второй:

if(first.except(second).union(second.except(first)).count() == 0) 
    first == second 
else 
    first != second 
Смежные вопросы