Pyspark считывает несколько файлов CSV в кадре данных в порядке - PullRequest
0 голосов
/ 07 января 2019

Когда я пытаюсь прочитать фолд, содержащий несколько файлов CSV, с помощью pyspark (2.2.1) в фрейм данных, записи данных расположены в неожиданном порядке. Папка данных создается другой программой Spark, а файлы выглядят как

/path/part-00000-*
/path/part-00001-*
......

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

Записи должны быть упорядочены по одному столбцу, и я уверен, что файлы расположены в правильном порядке, то есть part-00000- * содержит первую запись, part-00001- * содержит вторую запись ...

Однако, когда я считываю данные в фрейм данных с помощью pyspark:

df = SQLContext(sc).read.format('csv')
    .option('header', 'true')
    .option('mode', 'DROPMALFORMED')
    .load('/path')

порядок был изменен (данные должны быть упорядочены по столбцу timestamp). Я заметил, что записи сверху не имеют нулевых значений:

+--------------------+-----------+--------------+--------------+
|                time|  timestamp|         attr1|         attr2|
+--------------------+-----------+--------------+--------------+
|2018-09-30 21:33:...| 1538314433| 1538314433000| 1538314433000|
|2018-09-30 21:35:...| 1538314544| 1538314544000| 1538314544000|
|2018-09-30 21:38:...| 1538314682| 1538314682000| 1538314682000|
|2018-09-30 21:38:...| 1538314734| 1538314734000| 1538314734000|
|2018-09-30 21:25:...| 1538313912|          null| 1538313912000|
|2018-09-30 21:25:...| 1538313913|          null| 1538313913000|
|2018-09-30 21:25:...| 1538313914|          null| 1538313914000|
|2018-09-30 21:25:...| 1538313915|          null| 1538313915000|
|2018-09-30 21:25:...| 1538313932|          null| 1538313932000|
|2018-09-30 21:25:...| 1538313934| 1538313934000|          null|
|2018-09-30 21:25:...| 1538313942|          null| 1538313942000|
|2018-09-30 21:25:...| 1538313943|          null| 1538313943000|
|2018-09-30 21:26:...| 1538314007|          null| 1538314007000|
|2018-09-30 21:27:...| 1538314026| 1538314026000|          null|
|2018-09-30 21:27:...| 1538314028|          null| 1538314028000|
|2018-09-30 21:27:...| 1538314029|          null| 1538314029000|
|2018-09-30 21:27:...| 1538314043| 1538314043000|          null|
|2018-09-30 21:27:...| 1538314064| 1538314064000|          null|
|2018-09-30 21:27:...| 1538314067| 1538314067000|          null|

Мне интересно, почему это произошло и как я могу загрузить данные в правильном порядке.

1 Ответ

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

Если вы хотите сделать заказ по отметке времени, просто добавьте предложение orderBy:

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