我正在按前两列的顺序将数据帧写入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|
+-------------+----+-----------+----------+----------+--------+
似乎写入的数据框无序保存。我该如何解决?如何保存订购的商品?
答案 0 :(得分:3)
Saving ordered dataframe in Spark
Do Spark/Parquet partitions maintain ordering?
基于这些答案,您无法在文件写入期间保持顺序,因为分区是分别写入和读取的,因此只能保证对分区进行排序。