Pyspark datafame.limit () и drop_duplicates () дают неверные результаты - PullRequest
0 голосов
/ 08 января 2020

Я использую кластер Azure Databricks.

  1. Тип рабочего и драйвера: Standard_DS4_v2 Спецификации: 28,0 ГБ памяти, 8 ядер, 1,5 DBU
  2. Версия базы данных исполнения: 6.1 (включает Apache Spark 2.4.4, Scala 2.11)

У меня есть фрейм данных pyspark ttonag_algnd_prdictn_df1 . здесь около 32 000 строк. Этот фрейм данных извлекается из DB2 с помощью spark.read (...). Я просто извлекаю из него 10 строк, используя ключевое слово limit .


a = ttonag_algnd_prdictn_df1.limit(10)

a.show () дает (для удобства чтения я поставил файл в текстовый файл и сделал все это видимым в 1 строку)

TONAG_ALGND_PRDICTN_ID,TONAG_MGT_YR,LINE_SGMT_NBR|TRAK_TYP_CD|BGN_MP_NBR|END_MP_NBR|TRAK_SDTRAK_NBR|ALGND_BGN_MP_NBR|ALGND_END_MP_NBR 1 2017 1 M 165.475 168.351 0 165.475 168.351 1 2018 1 M 165.475 168.351 0 165.475 168.351 1 2019 1 M 165.475 168.351 0 165.475 168.351 2 2016 1 M 395.225 405.698 0 395.225 405.698 2 2017 1 M 395.225 405.698 0 395.225 405.698 2 2018 1 M 395.225 405.698 0 395.225 405.698 2 2019 1 M 395.225 405.698 0 395.225 405.698 3 2016 1 M 412.005 422.198 0 412.005 422.198 3 2017 1 M 412.005 422.198 0 412.005 422.198

Теперь я делаю следующие операции.

  1. выберите подмножество столбцов из 'a' и drop_duplicates.

unique_mp_pair_df = a.select("LINE_SGMT_NBR","TRAK_TYP_CD","TRAK_SDTRAK_NBR","ALGND_BGN_MP_NBR","ALGND_END_MP_NBR") unique_mp_pair_df.show()

+-------------+-----------+---------------+----------------+----------------+ |LINE_SGMT_NBR|TRAK_TYP_CD|TRAK_SDTRAK_NBR|ALGND_BGN_MP_NBR|ALGND_END_MP_NBR| +-------------+-----------+---------------+----------------+----------------+ | 1| M| 0 | 165.47500| 168.35100| | 1| M| 0 | 165.47500| 168.35100| | 1| M| 0 | 165.47500| 168.35100| | 1| M| 0 | 165.47500| 168.35100| | 1| M| 0 | 395.22500| 405.69800| | 1| M| 0 | 395.22500| 405.69800| | 1| M| 0 | 395.22500| 405.69800| | 1| M| 0 | 395.22500| 405.69800| | 1| M| 0 | 412.00500| 422.19800| | 1| M| 0 | 412.00500| 422.19800| +-------------+-----------+---------------+----------------+----------------+

unique_mp_pair_df = unique_mp_pair_df.drop_duplicates()

Теперь я буду ожидать, что строки будут уникальными. Однако значение, которое я получаю, вообще не имеет смысла.

unique_mp_pair_df.show()

+-------------+-----------+---------------+----------------+----------------+ |LINE_SGMT_NBR|TRAK_TYP_CD|TRAK_SDTRAK_NBR|ALGND_BGN_MP_NBR|ALGND_END_MP_NBR| +-------------+-----------+---------------+----------------+----------------+ | 7101| M| 0 | 11.29000| 24.88200| +-------------+-----------+---------------+----------------+----------------+

Выше приведена строка в ttonag_algnd_prdictn_df1 . Но после ограничения строк до 10, это не было включено. как показано выше, выполнив a.show ()

Кто-нибудь, пожалуйста, помогите мне понять это. Что я делаю неправильно? Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 09 января 2020

вам нужно понять лень исполнения искры, а предел случайный.

Ваш первый a.limit (). Show () и второй a.limit (). Drop_duplicates.show ( ) это два разных исполнения. И так как предел случайным образом выбирает 10 строк, два разных шоу могут привести к двум разным результатам.

...