spark中字符串类型的摘要统计信息

时间:2015-01-25 13:57:54

标签: scala apache-spark

在" R"。

中是否存在类似于汇总功能的东西

spark附带的汇总计算(MultivariateStatisticalSummary)仅对数字类型起作用。

我有兴趣获得字符串类型的结果,如前四个最大出现字符串(groupby类型的操作),唯一数量等。

是否有任何预先存在的代码?

如果没有,请建议处理字符串类型的最佳方法。

1 个答案:

答案 0 :(得分:1)

我不认为MLlib中有String这样的东西。但如果你要实现它,它可能是一个有价值的贡献。

只计算其中一个指标很容易。例如。按频率排名前4位:

def top4(rdd: org.apache.spark.rdd.RDD[String]) =
  rdd
    .map(s => (s, 1))
    .reduceByKey(_ + _)
    .map { case (s, count) => (count, s) }
    .top(4)
    .map { case (count, s) => s }

或uniques的数量:

def numUnique(rdd: org.apache.spark.rdd.RDD[String]) =
  rdd.distinct.count

但是,在一次通过中为所有指标执行此操作需要更多工作。


这些例子假设,如果你有多个"列"对于数据,您已将每列拆分为单独的RDD。这是组织数据的好方法,也是执行洗牌操作所必需的。

分割列的意思是什么:

def split(together: RDD[(Long, Seq[String])],
          columns: Int): Seq[RDD[(Long, String)]] = {
  together.cache // We will do N passes over this RDD.
  (0 until columns).map {
    i => together.mapValues(s => s(i))
  }
}