【问题标题】:How to write data in the dataframe into single .parquet file(both data & metadata in single file) in HDFS?如何将数据帧中的数据写入 HDFS 中的单个 .parquet 文件(单个文件中的数据和元数据)?
【发布时间】:2017-08-05 19:52:22
【问题描述】:

如何将数据帧中的数据写入 HDFS 中的单个 .parquet 文件(单个文件中的数据和元数据)?

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 中创建 parquet 文件,它会在 HDFS 中创建目录 "payloads.parquet" 并在该目录中创建多个文件 .parquet 文件,元数据文件正在保存。

找到 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

如何将数据框中的数据写入HDFS而不是包含多个文件的文件夹中的单个.parquet文件(单个文件中的数据和元数据)?

我们将不胜感激。

【问题讨论】:

  • 使用 coalesce(1) 获取单个文件
  • 为什么需要一个文件?如果您只是需要它来移动它,请使用 .gz.parquet 文件,因为它应该包含您需要的一切。其他文件是在这个过程中为各种事情生成的。
  • 嗨@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");这些命令还保存或写入包含镶木地板数据文件和元数据文件的目录。
  • 像这样: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 2017-03-15 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 2017- 03-15 09:02 /user/hduser/data_check/test_3.pa‌​rquet/part-r-00000-6593ef9d-45c1-49a3-9b23-a783a9075c24.gz.parquet
  • @ShivaRam 是否回答了您的问题,如果有,请回复解决方案

标签: apache-spark pyspark apache-spark-sql pyspark-sql biginsights


【解决方案1】:

在写入后使用 coalesce(1)。它会解决你的问题

df.coalesce(1).write

【讨论】:

  • 您的电话订单对我不起作用。我不得不做df.coalesce(1).write
【解决方案2】:

这应该可以解决问题。

df.coalesce(1).write.parquet(parquet_file_path)
df.write.mode('append').parquet("/tmp/output/people.parquet")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多