一枪多栏高效直方图

时间:2018-12-31 02:31:27

标签: scala apache-spark

这是我在一列上计算直方图的方式:

val df = spark.read.format("csv").option("header", "true").load("/project/test.csv")
df.map(row => row.getString(2).toDouble).rdd.histogram(10)

我想计算所有列的直方图。我可以简单地重复第二行(请参见上面的代码),并在每列上分别调用直方图。但是我担心的是,每次我调用histogram()时,Spark都会从磁盘加载数据,这意味着如果有10列,则数据将加载10次。有没有更有效的方法可以做到这一点?如何一次拍摄所有10列的直方图?

修改

这是将多个histogram()调用组合成一个表达式的一种方法:

val histograms = {
  val a = df.map(row => row.getString(0).toDouble).rdd.histogram(10)
  val b = df.map(row => row.getString(1).toDouble).rdd.histogram(15)
  (a, b)
}

这是否保证直方图只需对数据进行一次遍历即可计算出来?将多个直方图调用组合成一个表达式是技巧吗?还是有必要吗?即使在使用单独的语句的情况下,也不会在使用结果之前触发延迟评估吗?

0 个答案:

没有答案