我写了一个小的Scala + Spark代码,它读取一个大的CSV文件并计算所有列对直方图((col1,col1),(col1,col2),(col1,col3)的单独直方图等) ,并将结果逐步存储在数据库(Redis)上供其他应用程序使用。
我可以使用Spark-SQL做类似的事情吗? 我能够将数据存入Dataframe并计算直方图,但我只得到最终结果。
数据可能非常大,所以我希望其他应用程序能够在计算直方图的同时处理部分结果(N
行的直方图,其中N
是数字到目前为止Spark能够处理。)
编辑: 我到目前为止的代码示例:
val params = Map("url" -> "jdbc:vertica:someAddress", "dbtable" -> "schema.mytable")
val jdbc = sqlContext.load("jdbc", params)
val columns = jdbc.columns
val columnPairs = scala.collection.mutable.ArrayBuffer[(String, String)]()
for (i <- 0 to columns.size-1){
for (j <- i to columns.size-1){
columnPairs += ((columns(i), columns(j)))
}
}
val histograms = columnPairs.map{case(first, second) =>
enter code herejdbc.groupBy(first, second).count().collect()}
histograms.foreach(histogram => mergeToRedis(histogram))
这样它的列基于,它完成一个列对,然后将其保存到数据库。 我希望它是基于行的,需要几行,为所有可能的对生成直方图,合并到数据库并继续下一批。