如何同时使用两个特征对 RDD 条目进行排序?
How to sort RDD entries using two features simultaneously?
我有一个 Spark RDD,我想以有组织的方式对其条目进行排序。假设条目是一个包含 3 个元素 (name,phonenumber,timestamp)
的元组。我想首先根据 phonenumber
的值对条目进行排序,然后根据 timestamp
的值对条目进行排序,同时尊重而不更改基于 phonenumber
完成的排序。 (因此 timestamp
仅根据 phonenumber
排序重新排列)。是否有 Spark 函数可以执行此操作?
(我正在使用 Spark 2.x 和 Scala)
为了对RDD中的多个元素进行排序,可以使用sortBy
函数。请在下面的 Python 中找到一些示例代码。您也可以类似地用其他语言实现。
tmp = [('a', 1), ('a', 2), ('1', 3), ('1', 4), ('2', 5)]
sc.parallelize(tmp).sortBy(lambda x: (x[0], x[1]), False).collect()
此致,
尼拉吉
您可以在 RDD
上使用 sortBy
功能,如下所示
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)
输出:
(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")
然后你可以简单地做
df.sort("name", "timestamp")
希望对您有所帮助!
我有一个 Spark RDD,我想以有组织的方式对其条目进行排序。假设条目是一个包含 3 个元素 (name,phonenumber,timestamp)
的元组。我想首先根据 phonenumber
的值对条目进行排序,然后根据 timestamp
的值对条目进行排序,同时尊重而不更改基于 phonenumber
完成的排序。 (因此 timestamp
仅根据 phonenumber
排序重新排列)。是否有 Spark 函数可以执行此操作?
(我正在使用 Spark 2.x 和 Scala)
为了对RDD中的多个元素进行排序,可以使用sortBy
函数。请在下面的 Python 中找到一些示例代码。您也可以类似地用其他语言实现。
tmp = [('a', 1), ('a', 2), ('1', 3), ('1', 4), ('2', 5)]
sc.parallelize(tmp).sortBy(lambda x: (x[0], x[1]), False).collect()
此致,
尼拉吉
您可以在 RDD
上使用 sortBy
功能,如下所示
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)
输出:
(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")
然后你可以简单地做
df.sort("name", "timestamp")
希望对您有所帮助!