当我尝试通过pyspark(2.2.1)将包含多个CSV文件的折叠读取到数据框中时,数据记录的顺序异常。数据文件夹是由另一个Spark程序创建的,文件类似于
/path/part-00000-*
/path/part-00001-*
......
,每个文件仅包含一个记录。有些记录的某些列中具有空值。
记录应按一列排序,我确定文件顺序正确,即part-00000- *包含第一条记录,part-00001- *包含第二条记录... < / p>
但是,当我通过pyspark将数据读入数据框时:
df = SQLContext(sc).read.format('csv')
.option('header', 'true')
.option('mode', 'DROPMALFORMED')
.load('/path')
顺序已更改(数据应按列timestamp
进行排序)。我注意到顶部的记录没有空值:
+--------------------+-----------+--------------+--------------+
| time| timestamp| attr1| attr2|
+--------------------+-----------+--------------+--------------+
|2018-09-30 21:33:...| 1538314433| 1538314433000| 1538314433000|
|2018-09-30 21:35:...| 1538314544| 1538314544000| 1538314544000|
|2018-09-30 21:38:...| 1538314682| 1538314682000| 1538314682000|
|2018-09-30 21:38:...| 1538314734| 1538314734000| 1538314734000|
|2018-09-30 21:25:...| 1538313912| null| 1538313912000|
|2018-09-30 21:25:...| 1538313913| null| 1538313913000|
|2018-09-30 21:25:...| 1538313914| null| 1538313914000|
|2018-09-30 21:25:...| 1538313915| null| 1538313915000|
|2018-09-30 21:25:...| 1538313932| null| 1538313932000|
|2018-09-30 21:25:...| 1538313934| 1538313934000| null|
|2018-09-30 21:25:...| 1538313942| null| 1538313942000|
|2018-09-30 21:25:...| 1538313943| null| 1538313943000|
|2018-09-30 21:26:...| 1538314007| null| 1538314007000|
|2018-09-30 21:27:...| 1538314026| 1538314026000| null|
|2018-09-30 21:27:...| 1538314028| null| 1538314028000|
|2018-09-30 21:27:...| 1538314029| null| 1538314029000|
|2018-09-30 21:27:...| 1538314043| 1538314043000| null|
|2018-09-30 21:27:...| 1538314064| 1538314064000| null|
|2018-09-30 21:27:...| 1538314067| 1538314067000| null|
我想知道为什么会这样,以及如何以正确的顺序加载数据框。
答案 0 :(得分:2)
如果要按时间戳排序,只需添加orderBy
子句:
df.orderBy('timestamp').show()