Вычитание пустого информационного кадра возвращает счетчик, отличный от исходного - PullRequest
0 голосов
/ 24 января 2019

У меня есть 2 фрейма данных: original_df (с количеством строк) и empty_df (пустой фрейм данных).Когда я пытаюсь «вычесть» empty_df из original_df и посчитать оба кадра данных, результат будет другим:

schema = StructType([
    StructField("guid", StringType(), True)
])

empty_df = spark.createDataFrame(spark.sparkContext.emptyRDD(), 
                                 schema=schema)
original_df = spark.read.parquet('some_path')

diff_df = original_df.select('guid')
                     .subtract(empty_df.select('guid'))

print('Original DF count: ' + str(original_df.count()))
print('Empty DF count: ' + str(empty_df.count()))
print('Diff DF count: ' + str(diff_df.count()))

# Check difference
whats_different_df = original_df.select('guid')
                                .subtract(diff_df.select('guid'))

print('Difference between original and diff DF: ' + 
       str(whats_different_df.count()))

Я ожидаю в качестве вывода: Исходный счетчик DF: 68724356 Пустой счетчик DF: 0 Счетчик DIF: 68724356 Разницамежду оригиналом и разностью DF: 0

Но у меня было: Исходное количество разрядов: 68724356 Пустое количество разрядов: 0 Разное разность разметки: 68724294 Разница между разницей оригинала и разности: 0

Примечание: я попытался с небольшим примером (фиктивные данные, а не исходный), и он работал как ожидалось

1 Ответ

0 голосов
/ 29 января 2019

Я нашел себе ответ: мне нужно было удалять дубликаты при загрузке original_df:

original_df = spark.read.parquet('some_path').drop_duplicates(['guid'])

потому что функция вычитания эквивалентна 'EXCEPT DISTINCT' в SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...