Как записать данные в фрейм данных в один файл .parquet (как данные, так и метаданные в одном файле) в HDFS?

Как записать данные в фрейм данных в один файл .parquet (как данные, так и метаданные в одном файле) в HDFS?

df.show() --> 2 rows
+------+--------------+----------------+
| name|favorite_color|favorite_numbers|
+------+--------------+----------------+
|Alyssa| null| [3, 9, 15, 20]| | Ben| red| []|
+------+--------------+----------------+

df.rdd.getNumPartitions() - имеет 1 раздел

>>> df.rdd.getNumPartitions()

1

df.write.save("/user/hduser/data_check/test.parquet", format="parquet")

Если я использую указанную выше команду для создания файла паркета в HDFS, он создает каталог "payloads.parquet" в HDFS, а внутри этого каталога сохраняется несколько файлов .parquet file, файл метаданных.

Найдено 4 объекта

-rw-r--r-- 3 bimodjoul biusers 0 2017-03-15 06:47 
/user/hduser/data_check/test.parquet/_SUCCESS 
-rw-r--r-- 3 bimodjoul biusers 494 2017-03-15 06:47
/user/hduser/data_check/test.parquet/_common_metadata
-rw-r--r-- 3 bimodjoul biusers 862 2017-03-15 06:47
/user/hduser/data_check/test.parquet/_metadata 
-rw-r--r-- 3 bimodjoul biusers 885 2017-03-15 06:47
/user/hduser/data_check/test.parquet/part-r-00000-f83a2ffd-38bb-4c76-9f4c-357e43d9708b.gz.parquet

Как записать данные в фрейме данных в один .parquet файл (как данные, так и метаданные в одном файле) в HDFS, а не в папку с несколькими файлами?

Помощь будет очень признательна.


person Shiva Ram    schedule 15.03.2017    source источник
comment
используйте coalesce (1), чтобы получить один файл   -  person Ashish Singh    schedule 15.03.2017
comment
зачем тебе один файл? если вам нужно просто перемещать его, используйте файл .gz.parquet, так как в нем должно быть все, что вам нужно. Остальные файлы создаются в процессе для разных целей.   -  person Assaf Mendelson    schedule 15.03.2017
comment
Привет, @Ashish Singh, я пробовал две команды ниже: df.coalesce (1) .write.save (/user/hduser/data_check/test_3.parquet, format = parquet); df.coalesce (1) .write.parquet (/user/hduser/data_check/test_4.parquet); Эти команды также сохраняются или записываются как каталог с файлом данных паркета и файлами метаданных.   -  person Shiva Ram    schedule 15.03.2017
comment
Как это: hadoop fs -ls /user/hduser/data_check/test_3.pa‌ rquet Найдено 4 элемента -rw-r - r-- 3 bimodjoul biusers 0 2017-03-15 09:02 / user / hduser / data_check / test_3.pa‌ rquet / _SUCCESS -rw-r - r-- 3 bimodjoul biusers 494 15.03.2017 09:02 /user/hduser/data_check/test_3.pa‌ rquet / _common_metadata -rw-r - r- - 3 bimodjoul biusers 862 2017-03-15 09:02 /user/hduser/data_check/test_3.pa‌ rquet / _metadata -rw-r - r-- 3 bimodjoul biusers 885 15.03.2017 09:02 / user /hduser/data_check/test_3.pa‌ rquet / part-r-00000-6593ef9d-45c1-49a3-9b23-a783a9075c24.gz.parquet   -  person Shiva Ram    schedule 15.03.2017
comment
@ShivaRam ответил на ваш вопрос, если да, ответьте, если у вас есть   -  person Srinathji Kyadari    schedule 21.06.2020


Ответы (2)


После записи используйте coalesce (1). это решит вашу проблему

df.write.coalesce(1)
person sande    schedule 24.05.2018
comment
Ваш заказ на звонок мне не подошел. Я должен был сделать df.coalesce(1).write - person Gibado; 17.01.2019

Это должно решить проблему.

df.coalesce(1).write.parquet(parquet_file_path)
df.write.mode('append').parquet("/tmp/output/people.parquet")
person Hemlata Chelwani    schedule 27.07.2020