【发布时间】: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.parquet 找到 4 项 -rw-r--r-- 3 bimodjoul biusers 0 2017-03-15 09: 02 /user/hduser/data_check/test_3.parquet/_SUCCESS -rw-r--r-- 3 bimodjoul biusers 494 2017-03-15 09:02 /user/hduser/data_check/test_3.parquet/_common_metadata -rw-r--r-- 3 bimodjoul biusers 862 2017-03-15 09:02 /user/hduser/data_check/test_3.parquet/_metadata -rw-r--r-- 3 bimodjoul biusers 885 2017- 03-15 09:02 /user/hduser/data_check/test_3.parquet/part-r-00000-6593ef9d-45c1-49a3-9b23-a783a9075c24.gz.parquet
-
@ShivaRam 是否回答了您的问题,如果有,请回复解决方案
标签: apache-spark pyspark apache-spark-sql pyspark-sql biginsights