【发布时间】:2019-08-03 07:44:54
【问题描述】:
我想使用我自己的比较器根据列对 DataFrame 进行排序。在 Spark SQL 中可以做到这一点吗?
例如,假设我有一个注册为表“MyTable”的DataFrame,其中有一列“Day”,其类型为“string”:
id | Day
--------------------
1 | Fri
2 | Mon
3 | Sat
4 | Sun
5 | Thu
我想执行这个查询:
SELECT * FROM MyTable ORDER BY Day
我想用我自己的比较器订购“日”列。我考虑过使用UDF,但我不知道是否可能。请注意,我真的想在 Sort/Order By 操作中使用我的比较器。我不想将字符串从 Day 列转换为 Datetime 或类似的东西。
【问题讨论】:
-
在 spark 中无法使用通用的 java 比较器进行排序。您需要定义一个排序键(该类型是按 s.a. long、string、date... 排序的类型)并为数据集使用 orderBy 或为 RDD 使用 sortBy。如果您告诉我们您的具体逻辑,也许我们可以考虑一个适合您的解决方案。
-
感谢您的回答。我必须做两件事:1)使用本例中的 SQL 查询; 2) 当我必须执行 ORDER BY 时,使用运算符对某个列进行排序。一旦无法在 UDF 中使用通用比较器,您会推荐我另一种选择吗?我考虑过使用 Spark 规则/策略将 DF 转换为 RDD 并将 SortBy 与我的比较器一起使用。但我不知道具体该怎么做。
-
其实我有点错。可以将比较器(scala 中的排序)与 RDD 一起使用。我添加了一个解决方案来解释如何做到这一点。我也谈论替代品。
标签: scala sorting apache-spark apache-spark-sql