【发布时间】:2016-04-26 08:47:15
【问题描述】:
我正在练习在 Spark shell 中进行排序。我有一个大约 10 列/变量的 rdd。我想根据第 7 列的值对整个 rdd 进行排序。
rdd
org.apache.spark.rdd.RDD[Array[String]] = ...
据我所知,这样做的方法是使用 sortByKey,而它又只适用于对。所以我映射了它,所以我有一对由 column7(字符串值)和完整的原始 rdd(字符串数组)组成
rdd2 = rdd.map(c => (c(7),c))
rdd2: org.apache.spark.rdd.RDD[(String, Array[String])] = ...
然后我申请sortByKey,还是没问题...
rdd3 = rdd2.sortByKey()
rdd3: org.apache.spark.rdd.RDD[(String, Array[String])] = ...
但是现在我如何从 rdd3 (Array[String]) 中分离、收集和保存排序后的原始 rdd?每当我尝试对 rdd3 进行拆分时,都会出现错误:
val rdd4 = rdd3.map(_.split(',')(2))
<console>:33: error: value split is not a member of (String, Array[String])
我在这里做错了什么?还有其他更好的方法来对其中一列的 rdd 进行排序吗?
【问题讨论】:
-
我不明白你到底想要什么。您的意思是要拆分 Array[String] 中的每个字符串?
-
你试图拆分元组,这就是错误的原因
-
@John 不,我想拆分 rdd3(一对已排序的 column7 和原始 rdd),所以我会返回原始 rdd 但仍然在第 7 列上排序......实际上没有列7 前缀(如在 rdd3 中)。我稍微编辑了问题,现在更清楚了吗?
标签: scala apache-spark rdd