【发布时间】:2015-10-22 13:30:55
【问题描述】:
我正在使用 spark sql 对我的数据集运行查询。查询的结果非常小,但仍然是分区的。
我想合并生成的 DataFrame 并按列对行进行排序。我试过了
DataFrame result = sparkSQLContext.sql("my sql").coalesce(1).orderBy("col1")
result.toJSON().saveAsTextFile("output")
我也试过
DataFrame result = sparkSQLContext.sql("my sql").repartition(1).orderBy("col1")
result.toJSON().saveAsTextFile("output")
输出文件按块排序(即分区是有序的,但数据帧没有作为一个整体排序)。例如,而不是
1, value
2, value
4, value
4, value
5, value
5, value
...
我明白了
2, value
4, value
5, value
-----------> partition boundary
1, value
4, value
5, value
- 获取查询结果绝对排序的正确方法是什么?
- 为什么不将数据框合并到一个分区中?
【问题讨论】:
-
如您所知,重新分区是一个惰性过程,直到下一次操作才会执行。我建议你在排序和重新分区之间插入一个“计数”计算,这样你就可以确保重新分区发生在排序之前而不是一起发生。让我知道结果。
-
我尝试将
count添加为result = result.coalesce(1); result.count(); result.orderBy("col1"),但没有成功... -
@fo_x86:您应该在将 DF 转换为 JSON 后使用合并或重新分区,然后保存为文本文件。这应该可以解决您的问题。
标签: apache-spark apache-spark-sql spark-dataframe