【发布时间】:2019-11-13 02:25:14
【问题描述】:
概述:我正在尝试按多列对火花 DF 进行排序,而生成的 DF 仅按一列排序。
预期结果:在每个公司中名称按字母顺序排序的 DF。
玩具 DF:
l = [('Alice', 1,'funcompany'),
('Bob',5,'funcompany'),
('Jane',30,'Amazon'),
('Kenneth',2,'lameplace'),
('Dill',10,'funcompany'),
('Zeb',0,'lameplace'),
('Archie',50,'funcompany'),
('Debra',0,'funcompany'),
('Vicky',24,'funcompany'),
('Kanye',40,'lameplace')]
datis=sqlContext.createDataFrame(l, ['name', 'age','company'])
排序:
colss = ["name", "company"]
datis.orderBy(colss,ascending=[1,0]).show()
【问题讨论】:
-
尝试使用布尔值列表而不是整数。不确定它是否会有所帮助。或者,只需执行
orderBy(F.asc('name'), F.desc('company'))。 -
这是预期的,因为第一列中没有欺骗/关系。仅当第一列具有相同的值时才应用第二列排序。
-
@absolutelydevastated "datis.orderBy(F.asc('name'), F.asc('company')).show()" 似乎给出了同样的问题。您可以使用布尔值列表而不是整数来扩展一点吗?谢谢。
-
@jxc 只是为了确认一下,您是说不能使用“orderBy”按多列排序?
-
不,您当然可以按多列排序,但 orderBy 列表中的第一列始终优先。如果通过比较第一列来确定顺序,则简单地忽略第二列和后面的列。您可以更改示例的前 4 行并将名称全部设置为
Alice看看会发生什么
标签: python-3.x pyspark apache-spark-sql pyspark-sql pyspark-dataframes