Spark scala是列中最常用的项

Spark scala是列中最常用的项,scala,apache-spark,rdd,Scala,Apache Spark,Rdd,我有一个RDD,有4列,如下所示:(1列-名称,2列-标题,3列-视图,4列-大小) 我想选择最常出现的标题(基于列标题)。 输出应为: Droomstele在数据中出现3次 如何对标题进行分组,然后从中获取最大数量?这里有一种可能性: 给定此输入RDD: var input = sc .parallelize(Array( "aa Droomstele 1 8030", "aa Wikiquote 1 78261", "aa Special 1 20493",

我有一个RDD,有4列,如下所示:(1列-名称,2列-标题,3列-视图,4列-大小)

我想选择最常出现的标题(基于列标题)。 输出应为:
Droomstele

在数据中出现3次

如何对标题进行分组,然后从中获取最大数量?

这里有一种可能性:

给定此输入RDD:

var input = sc
  .parallelize(Array(
    "aa Droomstele 1 8030",
    "aa Wikiquote 1 78261",
    "aa Special 1 20493",
    "aa.b Droomstele 7 4749",
    "aa.b Droomstele 1 4751",
    "af Blowback 2 16896",
    "af Bluff 2 21442",
    "en Bloubok 1 0"
  ))
  .map(row => row.split(" "))
下面返回Droomstele:

input.map(split => (split(1), 1)) // RDD[("Droomstele", 1), ...]
  .reduceByKey(_ + _)             // RDD[..., ("Droomstele", 3), ...]
  .sortBy(_._2)                   // RDD[("Droomstele", 3), ...] (Droomstele is first)
  .first                          // ("Droomstele", 3)
  ._1                             // "Droomstele"

或者,稍微快一点:

input.map(split => (split(1), 1))                 // RDD[("Droomstele", 1), ...]
  .reduceByKey(_ + _)                             // RDD[..., ("Droomstele", 3), ...]
  .takeOrdered(1)(Ordering[Int].reverse.on(_._2)) // Array[("Droomstele", 3)]
  .head                                           // ("Droomstele", 3)
  ._1                                             // "Droomstele"
这是一种可能性:

给定此输入RDD:

var input = sc
  .parallelize(Array(
    "aa Droomstele 1 8030",
    "aa Wikiquote 1 78261",
    "aa Special 1 20493",
    "aa.b Droomstele 7 4749",
    "aa.b Droomstele 1 4751",
    "af Blowback 2 16896",
    "af Bluff 2 21442",
    "en Bloubok 1 0"
  ))
  .map(row => row.split(" "))
下面返回Droomstele:

input.map(split => (split(1), 1)) // RDD[("Droomstele", 1), ...]
  .reduceByKey(_ + _)             // RDD[..., ("Droomstele", 3), ...]
  .sortBy(_._2)                   // RDD[("Droomstele", 3), ...] (Droomstele is first)
  .first                          // ("Droomstele", 3)
  ._1                             // "Droomstele"

或者,稍微快一点:

input.map(split => (split(1), 1))                 // RDD[("Droomstele", 1), ...]
  .reduceByKey(_ + _)                             // RDD[..., ("Droomstele", 3), ...]
  .takeOrdered(1)(Ordering[Int].reverse.on(_._2)) // Array[("Droomstele", 3)]
  .head                                           // ("Droomstele", 3)
  ._1                                             // "Droomstele"

我检测到这个托管内存泄漏;大小=5281848字节。由于我的数据文件很大,你能建议一种更有效的方法吗;这可能会有所帮助:我检测到了这个托管内存泄漏;大小=5281848字节。由于我的数据文件很大,你能建议一种更有效的方法吗;这可能有助于: