为什么读取后不保留书面数据帧的顺序?

时间:2019-12-03 11:08:07

标签: apache-spark pyspark

我正在按前两列的顺序将数据帧写入HDFS:

final = <dataframe>.select('Pais','Anho','NumPatentes','TotalCitas','MediaCitas','MaxCitas').orderBy("Pais", "Anho")

final.show()
final.write.format("csv").save("<path>", header = 'true')

然后我正在使用以下方法从HDFS中读取它:

a = (spark \
.read \
.option("inferSchema", "true") \
.option("header", "true") \
.csv("<path>")).show()

但是,第一个show()的输出不等于第二个。我的意思是,显示的第一个数据帧是有序的,而第二个则没有。这些是第一个和第二个数据帧:

+-------------+----+-----------+----------+----------+--------+
|         Pais|Anho|NumPatentes|TotalCitas|MediaCitas|MaxCitas|
+-------------+----+-----------+----------+----------+--------+
|        Italy|1970|          1|         3|       3.0|       3|
|        Italy|1980|          2|         3|       1.5|       2|
|        Italy|1983|          2|         4|       2.0|       2|
|United States|1978|          1|         1|       1.0|       1|
+-------------+----+-----------+----------+----------+--------+
+-------------+----+-----------+----------+----------+--------+
|         Pais|Anho|NumPatentes|TotalCitas|MediaCitas|MaxCitas|
+-------------+----+-----------+----------+----------+--------+
|United States|1978|          1|         1|       1.0|       1|
|        Italy|1980|          2|         3|       1.5|       2|
|        Italy|1970|          1|         3|       3.0|       3|
|        Italy|1983|          2|         4|       2.0|       2|
+-------------+----+-----------+----------+----------+--------+

似乎写入的数据框无序保存。我该如何解决?如何保存订购的商品?

1 个答案:

答案 0 :(得分:3)

Saving ordered dataframe in Spark

Do Spark/Parquet partitions maintain ordering?

基于这些答案,您无法在文件写入期间保持顺序,因为分区是分别写入和读取的,因此只能保证对分区进行排序。