首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何同时使用两个功能对RDD条目进行排序?

如何同时使用两个功能对RDD条目进行排序?
EN

Stack Overflow用户
提问于 2017-07-31 21:25:06
回答 2查看 597关注 0票数 0

我有一个Spark RDD,我想要以有组织的方式对其条目进行排序。假设条目是一个包含3个元素(name,phonenumber,timestamp)的元组。我希望首先根据phonenumber的值对条目进行排序,然后根据timestamp的值对条目进行排序,同时遵守而不是更改基于phonenumber的排序。(因此,timestamp仅根据phonenumber排序进行重新排列)。有没有Spark函数可以做到这一点?

(我在Scala中使用Spark 2.x )

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-31 21:55:01

为了在RDD中进行基于多个元素的排序,您可以使用sortBy函数。请在下面找到一些Python的示例代码。您也可以在其他语言中以类似方式实现。

代码语言:javascript
运行
复制
tmp = [('a', 1), ('a', 2), ('1', 3), ('1', 4), ('2', 5)]

sc.parallelize(tmp).sortBy(lambda x: (x[0], x[1]), False).collect()

致以敬意,

Neeraj

票数 5
EN

Stack Overflow用户

发布于 2017-07-31 22:17:12

您可以在RDD上使用sortBy函数,如下所示

代码语言:javascript
运行
复制
val df = spark.sparkContext.parallelize(Seq(
  ("a","1", "2017-03-10"),
  ("b","12", "2017-03-9"),
  ("b","123", "2015-03-12"),
  ("c","1234", "2015-03-15"),
  ("c","12345", "2015-03-12")
))//.toDF("name", "phonenumber", "timestamp")

df.sortBy(x => (x._1, x._3)).foreach(println)

输出:

代码语言:javascript
运行
复制
(c,1234,2015-03-15)
(c,12345,2015-03-12)
(b,12,2017-03-9)
(b,123,2015-03-12)
(a,1,2017-03-10)

如果你有一个带有toDF("name", "phonenumber", "timestamp")的数据帧,那么你可以简单地做

代码语言:javascript
运行
复制
df.sort("name", "timestamp")

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45417220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档