【发布时间】:2019-12-03 20:49:26
【问题描述】:
我正在将数据帧写入 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|
+-------------+----+-----------+----------+----------+--------+
看起来写入的数据帧是无序保存的。我该如何解决这个问题?如何保存已订购?
【问题讨论】:
-
spark 不会按顺序读取/写入数据,您需要在从 HDFS 读取数据中再次提到 order by。这就是为什么不建议在 spark 中使用 order by 的原因。如果您希望数据按特定顺序排列,则可以在写入前忽略 order by,并在回读期间使用一次。
标签: apache-spark pyspark